使用微软企业库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,  truewhere);
             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数据库,如需转载请自行联系原博主。



目录
相关文章
|
30天前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
169 0
|
1月前
|
SQL 数据库 OceanBase
OceanBase数据库的主备库参照的配置文件
【2月更文挑战第27天】OceanBase数据库的主备库参照的配置文件
32 4
|
23天前
|
存储 NoSQL Java
Java数据库编程指南:实现高效数据存储与访问
【4月更文挑战第2天】Java开发者必须掌握数据库编程,尤其是JDBC,它是连接数据库的标准接口。使用Spring JDBC或JPA能简化操作。选择合适的JDBC驱动,如MySQL Connector/J,对性能至关重要。最佳实践包括事务管理、防SQL注入、优化索引和数据库设计。NoSQL数据库如MongoDB也日益重要,Java有对应的驱动支持。理解这些概念和技术是构建高效数据库应用的基础。
Java数据库编程指南:实现高效数据存储与访问
|
2月前
|
存储 监控 安全
内网屏幕监控软件的数据存储与管理:使用SQLite数据库保存监控记录和配置信息
在当今数字化时代,安全和监控在企业和组织中变得至关重要。内网屏幕监控软件作为一种关键工具,帮助组织监视员工的活动并确保信息安全。这种软件不仅需要高效地记录和管理监控数据,还需要能够方便地进行配置和调整。本文将讨论如何使用SQLite数据库来保存监控记录和配置信息,并介绍如何通过自动化机制将监控到的数据提交到指定网站。
163 2
|
2天前
|
存储 SQL 数据库
数据库库表结构设计:原理、实例与最佳实践
数据库库表结构设计:原理、实例与最佳实践
15 0
|
9天前
|
SQL 缓存 Java
Java数据库连接池:优化数据库访问性能
【4月更文挑战第16天】本文探讨了Java数据库连接池的重要性和优势,它能减少延迟、提高效率并增强系统的可伸缩性和稳定性。通过选择如Apache DBCP、C3P0或HikariCP等连接池技术,并进行正确配置和集成,开发者可以优化数据库访问性能。此外,批处理、缓存、索引优化和SQL调整也是提升性能的有效手段。掌握数据库连接池的使用是优化Java企业级应用的关键。
|
12天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
17天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
23 0
|
1月前
|
SQL Java 关系型数据库
Java数据库访问
Java数据库访问
|
1月前
|
关系型数据库 数据库 C++
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)
嵌入式数据库sqlite3【基础篇】基本命令操作,小白一看就懂(C/C++)

热门文章

最新文章