使用微软企业库EnterpriseLibary访问SQLite数据库

SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎,SQLite用的非常广泛,支持通用的SQL92标准,支持事务操作,

支持最大可达2T的数据库,在小型数据库使用性能上由于微软的Access数据库等等特点。

由于默认的微软企业库EnterpriseLibary不支持

SQLite的数据库访问,因此需要在

企业库EnterpriseLibary中访问这种数据库的话,需要使用一个企业库的扩展类库,该类库可以http://entlibcontrib.codeplex.com/ 上下载,结合一起使用,非常方便,很好的利用了微软企业库的优势和特点。

默认如果没有采用微软

企业库EnterpriseLibary 的话,紧紧使用SQLite的对象来操作数据库,是这样的

        /// <summary>    
        /// 执行SQL查询语句,返回查询结果的所有记录的第一个字段,用逗号分隔。    
        /// </summary>    
        /// <param name="sql">SQL语句</param>    
        /// <returns>    
        /// 返回查询结果的所有记录的第一个字段,用逗号分隔。    
        /// </returns>    
        public string SqlValueList2(string sql)
        {
            SQLiteConnection connection = new SQLiteConnection(connectionString);
            SQLiteCommand cmd = new SQLiteCommand(sql, connection);

            connection.Open();
            StringBuilder result = new StringBuilder();
            using (SQLiteDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    result.AppendFormat("{0},", dr[0].ToString());
                }
            }

            string strResult = result.ToString().Trim(',');
            return strResult;
        }

        /// <summary>    
        /// 执行SQL查询语句,返回所有记录的DataTable集合。    
        /// </summary>    
        /// <param name="sql">SQL查询语句</param>    
        /// <returns></returns>    
        public DataTable SqlTable2(string sql)
        {
            DataSet ds = new DataSet();
            SQLiteDataAdapter adpater = new SQLiteDataAdapter(sql, connectionString);
            adpater.Fill(ds);
            
            return ds.Tables[0];
        } 

如果使用上面的做法,只需要指定连接字符串ConnectionString即可,一般可以这样指定其数据库连接字符串。

   connectionString = string.Format(@"Data Source={0}\OrderWater.db;Version=3;", Application.StartupPath); 

如果是使用微软的企业库EnterpriseLibary来进行数据库访问的话,那么需要在配置文件中配置数据库访问,如下所示。

 

注意红色框部分就可以顺利配置好Sqlite数据库的企业库配置信息了。

然后我们在代码中访问使用Sqlite数据库的时候,就非常透明了。

               
        /// <summary>    
        /// 执行SQL查询语句,返回查询结果的所有记录的第一个字段,用逗号分隔。    
        /// </summary>    
        /// <param name="sql">SQL语句</param>    
        /// <returns>    
        /// 返回查询结果的所有记录的第一个字段,用逗号分隔。    
        /// </returns>    
        public string SqlValueList(string sql)
        {
            Database db = DatabaseFactory.CreateDatabase();
            DbCommand cmd = db.GetSqlStringCommand(sql);

            StringBuilder result = new StringBuilder();
            using (IDataReader dr = db.ExecuteReader(cmd))
            {
                result.AppendFormat("{0},", dr[0].ToString());
            }
            string strResult = result.ToString().Trim(',');
            return strResult;
        }

                 
        /// <summary>    
        /// 执行SQL查询语句,返回所有记录的DataTable集合。    
        /// </summary>    
        /// <param name="sql">SQL查询语句</param>    
        /// <returns></returns>    
        public DataTable SqlTable(string sql)
        {
            Database db = DatabaseFactory.CreateDatabase();
            DbCommand cmd = db.GetSqlStringCommand(sql);

            return db.ExecuteDataSet(cmd).Tables[0];

 如果结合我的分页控件使用,那么分页控件的查询数据的使用代码如下所示:

        /// <summary>
        /// 标准的记录查询函数
        /// </summary>
        /// <param name="where"></param>
        /// <param name="pagerInfo"></param>
        /// <returns></returns>
        private DataTable FindToDataTable(string where, PagerInfo pagerInfo)
        {
            WHC.Pager.WinControl.PagerHelper helper = new WHC.Pager.WinControl.PagerHelper("All_Customer", "*", "LastUpdated", pagerInfo.PageSize, pagerInfo.CurrenetPageIndex, true, where);
            string countSql = helper.GetPagingSql(WHC.Pager.WinControl.DatabaseType.SQLite, true);
            string dataSql = helper.GetPagingSql(WHC.Pager.WinControl.DatabaseType.SQLite, false);

            string value = SqlValueList(countSql);
            pagerInfo.RecordCount = Convert.ToInt32(value);//为了显示具体的信息,需要设置总记录数
            DataTable dt = SqlTable(dataSql);
            return dt;

效果如下所示:

  

DevExpress样式版本的分页控件效果如下所示(均支持SQLite分页)

  

由于Sqlite的开发,在日常的项目中,还是比较常见的,因此,为了方便,我把Sqlite的数据访问也集成到我的Winform框架系统中了,这样通过扩展,支持更多的数据库,项目视图如下所示。

 

如果你有Sqlite的项目开发,使用这个做好的框架,应该是能事半功倍的。

本文转自博客园伍华聪的博客,原文链接:使用微软企业库EnterpriseLibary访问SQLite数据库,如需转载请自行联系原博主。

时间: 2024-10-22 07:39:07

使用微软企业库EnterpriseLibary访问SQLite数据库的相关文章

在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持

在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreSQL.IBM DB2.或者国产达梦数据库等等,这些数据库的共同特点是关系型数据库,基本上开发的模型都差不多,不过如果我们基于ADO.NET的基础上进行开发的话,那么各种数据库都有自己不同的数据库操作对象,微软企业库Enterprise Library是基于这些不同数据库的操作做的抽象模型,适合多数据

数据库-在用微软企业库连接SqlServerCe不成功

问题描述 在用微软企业库连接SqlServerCe不成功 我在项目中用微软企业库的方式连接SqlServer Ce不成功,但是连接MSSQL没问题:我想知道微软企业库是否能连接SqlServer Ce: 配置文件 <add name=""CS_Telecom"" connectionString=""Data Source=D:EWS_ProjectDataBaseMyDatabase#1.sdf;Password=123456"

微软企业库删除效率问题

问题描述 方法一DataTabledt=silkPlanDataset.MT_PL_ZS_TASK_DEL.GetChanges(DataRowState.Deleted);if(dt!=null){//dt.RejectChanges();DateTimedtime1=DateTime.Now;DataColumn[]keys=newDataColumn[1];keys[0]=dt.Columns["ZS_TASK_DEL_ID"];dt.PrimaryKey=keys;//指定主键

C#简单访问SQLite数据库的方法(安装,连接,查询等)_C#教程

本文实例讲述了C#简单访问SQLite数据库的方法.分享给大家供大家参考,具体如下: 下载最新版SQLite(http://www.sqlite.org/download.html),其他版本也可以,这里使用的版本是sqlite-3_6_6_1 a.解压后copy c:\sqlite-3_6_6_1 b.进入cmd模式,进入sqlite-3_6_6_1目录,执行sqlite3 mytest.db c. create table test (seq int,desc varchar(8)); in

如何用Perl访问SQLite数据库

SQLite是一个零配置.无服务端.基于文件的事务型数据库系统.由于它的轻量级,自包含和紧凑的设计,所以当你想要集成数据库到你的程序中时,SQLite是一个非常不错的选择.在这篇文章中,我会展示如何用Perl脚本来创建和访问SQLite数据库.我演示的Perl代码片段是完整的,所以你可以很简单地修改并集成到你的项目中. 访问SQLite的准备 我会使用SQLite DBI Perl驱动来连接到SQLite3.因此你需要在Linux中安装它(和SQLite3一起). Debian. Ubuntu

基于微软企业库的AOP组件(含源码)

软件开发,离不开对日志的操作.日志可以帮助我们查找和检测问题,比较传统的日志是在方法执行前或后,手动调用日志代码保存.但自从AOP出现后,我们就可以避免这种繁琐但又必须要实现的方式.本文是在微软企业库的AOP基础上封装出的组件.注意:是使用2.0版本,因为2.0以上版本是基于Net4.5类库的.好了,废话不多说.如图-1所示 图-1 说明     logmethodBillModel文件,是记录AOP详细信息     IBasicCodeService和BasicCodeService是用于测试

C#访问SQLite数据库实例

  SQLite是一款非常轻量级的关系数据库系统,支持多数SQL92标准.SQLite在使用前不需要安装设置,不需要进程来启动.停止或配置,而其他大多数SQL数据库引擎是作为一个单独的服务器进程,被程序使用某种内部进程通信(典型的是TCP/IP),完成发送请求到服务器和接收查询结果的工作,SQLite不采用这种工作方式.使用SQLite时,访问数据库的程序直接从磁盘上的数据库文件读写,没有中间的服务器进程.使用SQLite一般只需要带上一个dll,就可以使用它的全部功能. SQLite的主要应用

问一个微软企业库DatabaseFactory的问题

问题描述 Databasedb=DatabaseFactory.CreateDatabase(Constant.DATABASENAME); 上述代码是企业库创建连接的代码,现在问题是DatabaseFactory为何不用申明和创建而能够直接创建对象呢? 解决方案 解决方案二:该回复于2014-01-15 09:57:12被版主删除解决方案三:一切都在配置文件读取的类中.详细看下.解决方案四:没用过,应该是静态类吧解决方案五:引用2楼yzg100的回复: 一切都在配置文件读取的类中.详细看下.

微软企业库实现连接字符串加密

微软公开的方法: public static Database db = DatabaseFactory.CreateDatabase("ConnectionString");    我把它修改为下面方法就可以进行自已的加密和解密了,jiemi为自定义的解密函数   public static SqlDatabase db = new SqlDatabase(jiemi(ConfigurationManager.ConnectionStrings["ConnectionStr