• 使用微软企业库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开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
      转载请注明出处:
    撰写人:伍华聪  http://www.iqidi.com 
        
  • 相关阅读:
    bits,Bytes,KB,MB,GB和TB之间的换算关系
    idea快捷键
    拦截器Interceptor和过滤器Filter的区别
    JSTL标签
    EL 表达式
    El 表达式和 Jstl 标签库
    JavaWeb servlet,乱码的原因和解决
    java类从加载、连接到初始化过程
    js中获取监听键盘事件
    ASP.NET Core Web 支付功能接入 微信-扫码支付篇(转)
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/2311338.html
Copyright © 2020-2023  润新知