zoukankan      html  css  js  c++  java
  • 使用微软企业库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 
        
  • 相关阅读:
    spark streaming 概述
    spark sql 的性能调优
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal (用中序和后序树遍历来建立二叉树)
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (用先序和中序树遍历来建立二叉树)
    LeetCode 90. Subsets II (子集合之二)
    LeetCode 88. Merge Sorted Array(合并有序数组)
    LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
    LeetCode 80. Remove Duplicates from Sorted Array II (从有序序列里移除重复项之二)
    LeetCode 79. Word Search(单词搜索)
    LeetCode 78. Subsets(子集合)
  • 原文地址:https://www.cnblogs.com/wuhuacong/p/2311338.html
Copyright © 2011-2022 走看看