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

开源代码:基于数据集的数据库操作通用类(支持所有数据库且内置分页功能),该如何解决

2012-01-07 
开源代码:基于数据集的数据库操作通用类(支持所有数据库且内置分页功能)我是这个月才开始接触.NET和数据库

开源代码:基于数据集的数据库操作通用类(支持所有数据库且内置分页功能)
我是这个月才开始接触.NET和数据库的,以前一直用的是C++    
所以眼界还比较狭窄,不知道这个类有没有硬伤    
比如在概念上就存在严重问题什么的。    
 
呵呵,请大家给点意见和评论,让我学点东西,谢谢。我会来结贴的。^_^    


using   System;
using   System.Data;
using   System.Data.Common;
using   System.Web.UI.WebControls;

namespace   Liuzewei
{
        //   类名:基于数据集的数据库操作通用类(支持所有数据库且内置分页功能)
        //
        //   作者:刘泽围
        //
        //   版权:在中国软件业不存在版权,可以随意使用   ^_^
        //
        //   版本:
        //
        //             2007年4月15日   内置了分页功能、将数据集与源数据之间的数据操作实现改为工厂模式
        //                                         特别致谢   CSDN   论坛会员   sp1234(假装热心灌水实则灌水搞垮论坛)
        //
        //             2007年4月14日   对   用数据集操作源数据库   时的种种不确定与迷茫迫使我动手写了这么
        //                                         个类并贴到了   CSDN   论坛,谢谢所有回复了帖子与给予我点拨的朋友们
        //
        //   说明:
        //
        //             本类将对源数据库的   查询、修改、删除、新增、更新与绑定操作抽象为统一的对数
        //             据行引用   的操作
        //
        //             本类内置分页功能,而且本类是非静态类,所以使用时无须考虑多次不同数据库操作
        //             ,彼此之间产生的影响
        //
        //             本类内部采用工厂模式实现,使本类支持   .NET   支持的所有数据库,同时你还可以很
        //             简单的针对你常用的数据库类型从本类相应派生出一个新类以方便你的使用
        //
        //             本类仅仅是对   .NET   FCL   的一个简单包装,但在逻辑层次上本人还是经过仔细考虑的
        //             比如说将所有操作抽象为统一操作时有考虑过尽量不损失原有的功能、性能与灵活性
        //             总之,使用本类简单方便灵活,同时可以减小项目期的复杂度
        //
        //   示例:
        //
        //             以Access数据库为例,如果同时要操作多个不同类型的数据库,只要对应实例化即可
        //
        //             1、实例化对象,必须有主键
        //                   DataBase   dataBase(   "SELECT   [ip],   [date],   [id]   FROM   [sitestat] ",
        //                             "Provider=Microsoft.JET.OLEDB.4.0;   Data   Source   =   C:\SiteStat.mdb ",
        //                             "System.Data.OleDb "   );


        //
        //             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、由其他控件或数据对象进行绑定,这里以   Repeater   进行分页绑定为例
        //                   int   totalPage;   //   绑定数据集中的第2页,每页10行数据,并返回总页数
        //                   repeater.DataSource   =   dataBase.DataView(   10,   1,   out   totalPage   );
        //                   repeater.Bind();
        //
        //             8、针对特定数据库派生新类,这里以   Access   数据库为例
        //                   public   class   OleDataBase   :   DataBase   {


        //                           public   OleDataBase(   string   queryString,   string   dataBasePath   )
        //                                   :   base(   queryString,   "Provider=Microsoft.JET.OLEDB.4.0;  
        //                                       Data   Source   =   "+dataBasePath,   "System.Data.OleDb "   ){}}
        //                   这里仅调用了基类构造函数以简化操作,当然你可以做得更多  
        //                   使用时除了实例化时参数不同以外,其他操作完全同基类对象
        //                   OleDataBase   oleDataBase   =   new   OleDataBase(   "SE... ",   "C:\S....mdb   );
        public   class   DataBase
        {
                #region   受保护成员

                //   本类实例映射自给定源数据库的公用数据集
                protected   DataSet   dataSet   =   new   DataSet();

                //   源数据库与数据集之间的数据适配器
                protected   DbDataAdapter   dataAdapter;
                protected   DbCommandBuilder   commandBuilder;

                #endregion


                #region   构造函数

                //   在托管堆上分配内存实例化类本身以及   DataSet,DataAdapter,CommandBuilder   对象  
                public   DataBase(   string   commandText,   string   connectionString,
                                                  string   providerInvariantName   )
                {
                        DbProviderFactory   providerFactory   =
                                DbProviderFactories.GetFactory(   providerInvariantName   );

                        DbConnection   connection   =   providerFactory.CreateConnection();
                        connection.ConnectionString   =   connectionString;

                        DbCommand   command   =   providerFactory.CreateCommand();
                        command.CommandText   =   commandText;
                        command.Connection   =   connection;



                        dataAdapter   =   providerFactory.CreateDataAdapter();
                        dataAdapter.SelectCommand   =   command;

                        commandBuilder   =   providerFactory.CreateCommandBuilder();
                        commandBuilder.QuotePrefix   =   "[ ";
                        commandBuilder.QuoteSuffix   =   "] ";
                        commandBuilder.DataAdapter   =   dataAdapter;

                        dataAdapter.Fill(   dataSet   );
                }

                #endregion


                #region   公有方法

                //   将本类实例公用数据集中数据更新到源数据库中
                public   void   Update()
                {
                        dataAdapter.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;
                }

                //   返回   DataView   用于调用者绑定本类实例公用数据集进行显示
                public   DataView   DataView()
                {
                        return   dataSet.Tables[0].DefaultView;
                }

                //   返回   DataView   用于调用者绑定本类实例公用数据集的某一分页进行显示
                public   DataView   DataView(   int   pageSize,   int   currentPage,   out   int   totalPage   )
                {
                        int   totalRows   =   dataSet.Tables[0].Rows.Count;

                        totalPage   =   (totalRows   /   pageSize)   +   ((totalRows   %   pageSize   ==   0)   ?   0   :   1);

                        DataSet   pagedDataSet   =   new   DataSet();
                        dataAdapter.Fill(   pagedDataSet,   currentPage   *   pageSize,   pageSize,
                                                            "pagedTable "   );

                        return   pagedDataSet.Tables[ "pagedTable "].DefaultView;
                }

                #endregion
        }
}

[解决办法]
sf
[解决办法]
别只基于数据集啊。。多写点啊
[解决办法]
学习!不久我再写一个.(很菜)
[解决办法]
支持一下
[解决办法]
ASP.net微软验证用户输入的进程在哪里?

即在.net报错之前或同时通知用户错误原因。

望高手给与指点,不胜感激!!!


[解决办法]
刚入门,学习一下..顶起来
[解决办法]


pagedDataSet.Tables[ "pagedTable "]

奇怪,为什么都喜欢这么用呢?pagedDataSet.Tables[0],我一直这么用来着,

热点排行