首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

今天下午写了一个基于数据集的通用数据库操作类,将数据库的操作抽象出来,散分^解决方案

2012-01-02 
今天下午写了一个基于数据集的通用数据库操作类,将数据库的操作抽象出来,散分^^我是这个月才开始接触.NET

今天下午写了一个基于数据集的通用数据库操作类,将数据库的操作抽象出来,散分^^
我是这个月才开始接触.NET和数据库的,以前一直用的是C++
所以眼界还比较狭窄,不知道这个类有没有硬伤
比如在概念上就存在严重问题什么的。

呵呵,请大家给点意见和评论,让我学点东西,谢谢。我会来结贴的。^_^

using   System;
using   System.Data;
using   System.Data.OleDb;
using   System.Data.SqlClient;

namespace   Liuzewei
{
        //
        //   类名:基于数据集的数据库操作类(通用于   Access、SQL   数据库)
        //
        //   作者:刘泽围   2007年4月14日
        //
        //   版权:在中国软件业不存在版权,可以随意使用   ^_^
        //
        //   说明:
        //
        //             本类将对源数据库的   查询、修改、删除、新增、更新与绑定   操作抽象为统一的对   数据行引用   的操作
        //             而且本类是非静态的,所以使用时无须考虑多次不同数据库操作,彼此之间产生的影响
        //
        //             本类仅仅是对数据集类的一个简单包装,但鉴于以上两点,使用本类却可以大大减小项目期的复杂度
        //
        //   示例:
        //
        //             以Access数据库为例,如果同时要操作多个不同类型的数据库,只要对应实例化多个本类对象分别操作就可以了
        //
        //             1、实例化对象,必须有主键
        //                   DataBase   dataBase(   "SELECT   [ip],   [date],   [id]   FROM   [sitestat] ",   "C:\SiteStat.mdb ",   false   );
        //
        //             2、查询数据行
        //                   DataRow[]   dataRows   =   dataBase.Select(   "id   >   10 "   );
        //
        //             3、显示数据行,dataRows来自于查询数据行时返回的引用
        //                   for   (   int   i=0;   i <   dataRows.Length;   i++   )
        //                           Response.Write(   dataRows[i][ "ip "].ToString()   );
        //
        //             4、修改数据行并更新到源数据库,dataRows来自于查询数据行时返回的引用
        //                   dataRows[2][ "ip "]   =   "127.0.0.1 ";
        //                   dataBase.Update();
        //
        //             5、删除数据行并更新到源数据库,dataRows来自于查询数据行时返回的引用
        //                   for   (   int   i=0;   i <   dataRows.Length;   i++   )
        //                           dataRows[i].Delete();
        //                   dataBase.Update();


        //
        //             6、插入新数据行并更新到源数据库
        //                   DataRow[]   newDataRows   =   dataBase.NewDataRows(   2   );
        //                   newDataRows[0][ "ip "]   =   "127.0.0.2 ";
        //                   newDataRows[1][ "ip "]   =   "127.0.0.3 ";
        //                   dataBase.Update();
        //
        //             7、绑定,这里是与分页数据源进行绑定
        //                   PagedDataSource   pagedDataSource   =   new   PagedDataSource();
        //                   pagedDataSource.DataSource   =   dataBase.DefaultView;
        //
        public   class   DataBase
        {
                //   本类实例映射自给定源数据库的公用数据集
                private   DataSet   dataSet;

                //   源数据库与数据集之间的数据适配器
                private   bool   isSqlDataBase;
                private   SqlDataAdapter   sqlDataAdapter;
                private   SqlCommandBuilder   sqlCommandBuilder;
                private   OleDbDataAdapter   oleDbDataAdapter;
                private   OleDbCommandBuilder   oleDbCommandBuilder;

                //
                //   在托管堆上分配内存实例化类本身以及   DataSet,DtaAdapter,CommandBuilder   对象  
                //
                public   DataBase(   string   selectCommandText,   string   dataBasePath,   bool   isSqlDataBase   )
                {
                        dataSet   =   new   DataSet();

                        if   (   isSqlDataBase   )
                        {
                                sqlDataAdapter   =   new   SqlDataAdapter(   selectCommandText,   dataBasePath   );

                                sqlCommandBuilder   =   new   SqlCommandBuilder(   sqlDataAdapter   );
                                sqlCommandBuilder.QuotePrefix   =   "[ ";


                                sqlCommandBuilder.QuoteSuffix   =   "] ";

                                sqlDataAdapter.Fill(   dataSet   );
                        }
                        else
                        {
                                oleDbDataAdapter   =   new   OleDbDataAdapter(   selectCommandText,   "Provider=Microsoft.JET.OLEDB.4.0;   Data   Source   =   "+dataBasePath   );

                                oleDbCommandBuilder   =   new   OleDbCommandBuilder(   oleDbDataAdapter   );
                                oleDbCommandBuilder.QuotePrefix   =   "[ ";
                                oleDbCommandBuilder.QuoteSuffix   =   "] ";

                                oleDbDataAdapter.Fill(   dataSet   );
                        }

                        this.isSqlDataBase   =   isSqlDataBase;
                }
               
                //
                //     返回   DefaultView   用于调用者与本类实例公用数据集进行绑定
                //
                public   DataView   DefaultView
                {
                        get   {   return   dataSet.Tables[0].DefaultView;   }
                }
               
                //
                //     将本类实例公用数据集中数据更新到源数据库中
                //
                public   void   Update()
                {
                        if   (   isSqlDataBase   )
                                sqlDataAdapter.Update(   dataSet   );
                        else
                                oleDbDataAdapter.Update(   dataSet   );



                        return;
                }
               
                //
                //   从本类实例公用数据集中查询现有数据行
                //
                //   调用者可以对返回数据行引用进行显示、修改和删除操作
                //
                //   操作完毕调用   Updata()   将操作更新到源数据库中
                //
                public   DataRow[]   Select(   string   expression   )
                {
                        DataRow[]   dataRows;
                        dataRows   =   dataSet.Tables[0].Select(   expression   );

                        return   dataRows;
                }
               
                //
                //   从本类实例公用数据集中开辟新数据行
                //
                //   调用者可以对返回数据行引用进行填充、修改和删除操作
                //
                //   操作完毕调用   Updata()   将操作更新到源数据库中
                //
                public   DataRow[]   NewDataRows(   int   lenth   )
                {
                        DataRow[]   dataRows   =   new   DataRow[lenth];

                        for   (   int   i   =   0;   i   <   lenth;   i++   )
                        {
                                dataRows[i]   =   dataSet.Tables[0].NewRow();
                                dataSet.Tables[0].Rows.Add(   dataRows[i]   );
                        }

                        return   dataRows;
                }
        }
}

[解决办法]

[解决办法]
先顶,再仔细看一下
------解决方案--------------------


...
[解决办法]
c# vs c++

语言之争本来就不是绝对重要的,关键还是语言背后的东西。

例如按照你的代码的大致意思,ADO.NET对一个DataSet填充是这样设计的:

public DataSet DataBase(string selectCommandText,string connStr,DbProviderFactory
factory)
{
DataSet ret = new DataSet();
DbConnection conn=factory.CreateConnection();
conn.ConnectionString=connStr;
DbCommand cmd=conn.CreateCommand();
cmd.CommandText=selectCommandText;
DbDataAdapter da=factory.CreateDataAdapter();
da.SelectCommand=cmd;
// if(da is SqlDataAdapter)
// {
// sqlCommandBuilder = new SqlCommandBuilder(da);
// sqlCommandBuilder.QuotePrefix = "[ ";
// sqlCommandBuilder.QuoteSuffix = "] ";
// }
da..Fill(ret);
return ret;
}


真正选择不同是数据库只是选择factory参数子类类型的事情。往往,在配置文件里改一下声明的类型名字,整个程序就切换到新的数据库上了(当然查询SQL等应该使用比较通用的SQL标准协议写法)。

可见,ado.net有合适的抽象层早已经在那里时时刻刻运行着了,只是你偏不去直接使用,偏要使用下一层次的概念。
[解决办法]
可以考虑把事物加进去~~~
[解决办法]
我还是个大菜鸟相比而言!!学习了
[解决办法]
我看很好
[解决办法]
EN,自己写完一个基类对ADO.net的基本原理、操作会有一个提高,我以前在写楼主这要的代码时深有体会,不知楼主现在是不是有豁然开朗的感觉,呵呵,继续努力,我以前写的代码可供参考:http://blog.csdn.net/luck0235/archive/2007/04/04/1552033.aspx
[解决办法]
用企业库不是很好,这些东西没必要自己都来写吧
[解决办法]
楼主精神可嘉 不过微软有SQLHelper似乎已经对于数据库操作很经典了!

http://www.microsoft.com/china/msdn/archives/library/dnbda/html/daab-rm.asp


有空欢迎大家看看我的博客啊http://blog.csdn.net/21aspnet 有很多菜鸟级别的文章
[解决办法]
够实在、厚道!
版权:在中国软件业不存在版权,可以随意使用 ^_^

[解决办法]
SQLHelper 就不要提了,没什么优点的。

还是自己写的好,尽管一开始的有总总问题,但是迈出了第一步,以后步步完善就可以了。

要理解深层次的才能写出来更好的代码。

最近我正在补充基础知识。

热点排行