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];
}
/// 執行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;
/// 標准的記錄查詢函數
/// </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的項目開發,使用這個做好的框架,應該是能事半功倍的。
最后,希望和大家一起共同研究技術,探討代碼。。。