SQLite是一个小型的C程序库,实现了独立的,可嵌入的,零配置的SQL数据库引擎,SQLite用的非常广泛,支持通用的SQL92标准,支持事务操作,
支持最大可达2T的数据库,在小型数据库使用性能上由于微软的Access数据库等等特点。由于默认的微软企业库EnterpriseLibary不支持
SQLite的数据库访问,因此需要在 企业库EnterpriseLibary中访问这种数据库的话,需要使用一个企业库的扩展类库,该类库可以 上下载,结合一起使用,非常方便,很好的利用了微软企业库的优势和特点。默认如果没有采用微软
企业库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, 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的项目开发,使用这个做好的框架,应该是能事半功倍的。
最后,希望和大家一起共同研究技术,探讨代码。。。