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



目录
相关文章
|
2月前
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
4天前
|
存储 SQL 数据库
数据库知识:了解SQLite或其他移动端数据库的使用
【10月更文挑战第22天】本文介绍了SQLite在移动应用开发中的应用,包括其优势、如何在Android中集成SQLite、基本的数据库操作(增删改查)、并发访问和事务处理等。通过示例代码,帮助开发者更好地理解和使用SQLite。此外,还提到了其他移动端数据库的选择。
15 8
|
2天前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
16 2
|
15天前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
21 4
|
15天前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
16 2
|
23天前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
30 3
|
25天前
|
应用服务中间件 PHP Apache
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展...”
|
2月前
|
存储 API 数据库
QML使用Sqlite数据库存储ListModel数据
本文介绍了在QML中使用Sqlite数据库存储ListModel数据的方法,包括如何创建数据库、读取数据、动态添加和删除数据,以及如何在程序启动和退出时与数据库同步数据。
|
15天前
|
存储 缓存 关系型数据库
sqlite 数据库 介绍
sqlite 数据库 介绍
29 0
|
2月前
|
数据库 数据库管理
qt对sqlite数据库多线程的操作
本文总结了在Qt中进行SQLite数据库多线程操作时应注意的四个关键问题,包括数据库驱动加载、加锁、数据库的打开与关闭,以及QsqlQuery变量的使用。