使用微软企业库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的项目开发,使用这个做好的框架,应该是能事半功倍的。

最后,希望和大家一起共同研究技术,探讨代码。。。 

 

 

主要研究技术:代码生成工具、Visio二次开发、送水管理软件等共享软件开发
专注于Winform开发框架、WCF开发框架的研究及应用。
  转载请注明出处:
撰写人:伍华聪  http:
//www.iqidi.com 
    

posted on 2012-01-03 21:27 伍华聪 阅读(2067) 评论(6) 编辑 收藏

评论

#1楼  回复 引用 查看   

顶一下,我的博客园战友。
2012-01-03 23:09 | 吉日嘎拉(杭州)      

#2楼[楼主]  回复 引用 查看   

引用吉日嘎拉(杭州):顶一下,我的博客园战友。

呵呵,同勉
2012-01-03 23:17 | 伍华聪      

#3楼  回复 引用 查看   

华聪友分享的文章还是很不错的。sqlite确实很好用,我在项目中经常用于原型开发,顶一个,多谢分享
2012-01-04 08:48 | 我是自由人      

#4楼  回复 引用 查看   

支持一下。
2012-01-04 08:52 | 海南.胡勇      

#5楼  回复 引用 查看   

顶一个!~~
其实规范而言不同的方法不应该用参数来区分的,获取计数的SQL和获取分页的SQL应该分开如GetCountingSql和GetPagingSql的...
2012-01-04 09:53 | 祭天      

#6楼  回复 引用 查看   

不错是好东西,多谢伍哥分享。想你致敬。新年快乐。
2012-01-04 11:19 | 南京.王清培      

导航

<2012年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

公告

昵称:伍华聪
园龄:6年7个月
荣誉:推荐博客
粉丝:676
关注:23

搜索

 

常用链接

最新随笔

我的标签

随笔档案(202)

文章分类(14)

文章档案(15)

相册

我的好友

我的技术支持站点(http://www.iqidi.com)

积分与排名

  • 积分 - 629355
  • 排名 - 79

最新评论

阅读排行榜

评论排行榜

推荐排行榜