真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#如何操作SQLite數(shù)據(jù)庫幫助類

這篇文章將為大家詳細講解有關(guān)C#如何操作SQLite數(shù)據(jù)庫幫助類,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

10年積累的網(wǎng)站設(shè)計、網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有云龍免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

具體如下:

最近有WPF做客戶端,需要離線操作存儲數(shù)據(jù),在項目中考慮使用Sqlite嵌入式數(shù)據(jù)庫,在網(wǎng)上找了不少資料,最終整理出一個公共的幫助類。

Sqlite是一個非常小巧的數(shù)據(jù)庫,基本上具備關(guān)系型數(shù)據(jù)庫操作的大多數(shù)功能,Sql語法也大同小異。下面是我整理的幫助類代碼:

1.獲取 SQLiteConnection 對象,傳入數(shù)據(jù)庫有地址即可。

/// 
/// 獲得連接對象
/// 
/// SQLiteConnection
public static SQLiteConnection GetSQLiteConnection()
{
 //Sqlite數(shù)據(jù)庫地址
 string str = AppDomain.CurrentDomain.BaseDirectory;
 var con = new SQLiteConnection("Data Source=" + str + "DataBass\\InfoServiceDbB.db");
 return con;
}

2.準備操作命令參數(shù),構(gòu)造SQLiteCommand 對象:

/// 
/// 準備操作命令參數(shù)
/// 
/// SQLiteCommand
/// SQLiteConnection
/// Sql命令文本
/// 參數(shù)數(shù)組
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, Dictionary data)
{
 if (conn.State != ConnectionState.Open)
  conn.Open();
 cmd.Parameters.Clear();
 cmd.Connection = conn;
 cmd.CommandText = cmdText;
 cmd.CommandType = CommandType.Text;
 cmd.CommandTimeout = 30;
 if (data!=null&&data.Count >= 1)
 {
  foreach (KeyValuePair val in data)
  {
   cmd.Parameters.AddWithValue(val.Key, val.Value);
  }
 }
}

3.查詢,返回DataSet

/// 
/// 查詢,返回DataSet
/// 
/// Sql命令文本
/// 參數(shù)數(shù)組
/// DataSet
public static DataSet ExecuteDataset(string cmdText, Dictionary data)
{
 var ds = new DataSet();
 using (SQLiteConnection connection = GetSQLiteConnection())
 {
  var command = new SQLiteCommand();
  PrepareCommand(command, connection, cmdText, data);
  var da = new SQLiteDataAdapter(command);
  da.Fill(ds);
 }
 return ds;
}

4.查詢,返回DataTable

/// 
/// 查詢,返回DataTable
/// 
/// Sql命令文本
/// 參數(shù)數(shù)組
/// DataTable
public static DataTable ExecuteDataTable(string cmdText, Dictionary data)
{
 var dt = new DataTable();
 using (SQLiteConnection connection = GetSQLiteConnection())
 {
  var command = new SQLiteCommand();
  PrepareCommand(command, connection, cmdText, data);
  SQLiteDataReader reader = command.ExecuteReader();
  dt.Load(reader);
 }
 return dt;
}

5.返回一行數(shù)據(jù) DataRow

/// 
/// 返回一行數(shù)據(jù)
/// 
/// Sql命令文本
/// 參數(shù)數(shù)組
/// DataRow
public static DataRow ExecuteDataRow(string cmdText, Dictionary data)
{
 DataSet ds = ExecuteDataset(cmdText, data);
 if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
  return ds.Tables[0].Rows[0];
 return null;
}

6.執(zhí)行數(shù)據(jù)庫操作

/// 
/// 執(zhí)行數(shù)據(jù)庫操作
/// 
/// Sql命令文本
/// 傳入的參數(shù)
/// 返回受影響的行數(shù)
public static int ExecuteNonQuery(string cmdText, Dictionary data)
{
 using (SQLiteConnection connection = GetSQLiteConnection())
 {
  var command = new SQLiteCommand();
  PrepareCommand(command, connection, cmdText, data);
  return command.ExecuteNonQuery();
 }
}

7.返回SqlDataReader對象

/// 
/// 返回SqlDataReader對象
/// 
/// Sql命令文本
/// 傳入的參數(shù)
/// SQLiteDataReader
public static SQLiteDataReader ExecuteReader(string cmdText, Dictionary data)
{
 var command = new SQLiteCommand();
 SQLiteConnection connection = GetSQLiteConnection();
 try
 {
  PrepareCommand(command, connection, cmdText, data);
  SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
  return reader;
 }
 catch
 {
  connection.Close();
  command.Dispose();
  throw;
 }
}

8.返回結(jié)果集中的第一行第一列,忽略其他行或列

/// 
/// 返回結(jié)果集中的第一行第一列,忽略其他行或列
/// 
/// Sql命令文本
/// 傳入的參數(shù)
/// object
public static object ExecuteScalar(string cmdText, Dictionary data)
{
 using (SQLiteConnection connection = GetSQLiteConnection())
 {
  var cmd = new SQLiteCommand();
  PrepareCommand(cmd, connection, cmdText, data);
  return cmd.ExecuteScalar();
 }
}

9.分頁查詢

/// 
/// 分頁查詢
/// 
/// 總記錄數(shù)
/// 頁牽引
/// 頁大小
/// Sql命令文本
/// 查詢總記錄數(shù)的Sql文本
/// 命令參數(shù)
/// DataSet
public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, Dictionary data)
{
 if (recordCount < 0)
  recordCount = int.Parse(ExecuteScalar(countText, data).ToString());
 var ds = new DataSet();
 using (SQLiteConnection connection = GetSQLiteConnection())
 {
  var command = new SQLiteCommand();
  PrepareCommand(command, connection, cmdText, data);
  var da = new SQLiteDataAdapter(command);
  da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");
 }
 return ds;
}

10.重新組織數(shù)據(jù)庫

當你從SQLite數(shù)據(jù)庫中刪除數(shù)據(jù)時, 未用的磁盤空間將會加入一個內(nèi)部的“自由列表”中。

當你下次插入數(shù)據(jù)時,這部分空間可以重用。磁盤空間不會丟失, 但也不會返還給操作系統(tǒng)。

如果刪除了大量數(shù)據(jù),而又想縮小數(shù)據(jù)庫文件占用的空間,執(zhí)行 VACUUM 命令。 VACUUM 將會從頭重新組織數(shù)據(jù)庫

你可以在你的程序中約定一個時間間隔執(zhí)行一次重新組織數(shù)據(jù)庫的操作,節(jié)約空間

public void ResetDataBass()
{
 using (SQLiteConnection conn = GetSQLiteConnection())
 {
  var cmd = new SQLiteCommand();
  if (conn.State != ConnectionState.Open)
   conn.Open();
  cmd.Parameters.Clear();
  cmd.Connection = conn;
  cmd.CommandText = "vacuum";
  cmd.CommandType = CommandType.Text;
  cmd.CommandTimeout = 30;
  cmd.ExecuteNonQuery();
 }
}

關(guān)于“C#如何操作SQLite數(shù)據(jù)庫幫助類”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


網(wǎng)站名稱:C#如何操作SQLite數(shù)據(jù)庫幫助類
網(wǎng)址分享:http://weahome.cn/article/pdoiie.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部