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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值