天天看点

使用微软企业库EnterpriseLibary访问SQLite数据库

SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎,SQLite用的非常广泛,支持通用的SQL92标准,支持事务操作,

支持最大可达2T的数据库,在小型数据库使用性能上由于微软的Access数据库等等特点。

由于默认的微软企业库EnterpriseLibary不支持

SQLite的数据库访问,因此需要在

默认如果没有采用微软

企业库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集合。    

        /// <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数据库的时候,就非常透明了。

        public string SqlValueList(string sql)

            Database db = DatabaseFactory.CreateDatabase();

            DbCommand cmd = db.GetSqlStringCommand(sql);

            using (IDataReader dr = db.ExecuteReader(cmd))

                result.AppendFormat("{0},", dr[0].ToString());

        public DataTable SqlTable(string 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, true, where);

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