久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

C#操作SQLite數據庫幫助類詳解

這篇文章主要介紹了C#操作SQLite數據庫幫助類,詳細分析了C#針對sqlite數據庫的連接、查詢、分頁等各種常見操作的實現與封裝技巧,需要的朋友可以參考下

本文實例講述了C#操作SQLite數據庫幫助類。分享給大家供大家參考,具體如下:

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

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

1.獲取 SQLiteConnection 對象,傳入數據庫有地址即可。


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

2.準備操作命令參數,構造SQLiteCommand 對象:


/// <summary>
/// 準備操作命令參數
/// </summary>
/// <param name="cmd">SQLiteCommand</param>
/// <param name="conn">SQLiteConnection</param>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="data">參數數組</param>
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, Dictionary<String, String> 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<String, String> val in data)
  {
   cmd.Parameters.AddWithValue(val.Key, val.Value);
  }
 }
}

3.查詢,返回DataSet


/// <summary>
/// 查詢,返回DataSet
/// </summary>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="data">參數數組</param>
/// <returns>DataSet</returns>
public static DataSet ExecuteDataset(string cmdText, Dictionary<string, string> 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


/// <summary>
/// 查詢,返回DataTable
/// </summary>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="data">參數數組</param>
/// <returns>DataTable</returns>
public static DataTable ExecuteDataTable(string cmdText, Dictionary<string, string> 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.返回一行數據 DataRow


/// <summary>
/// 返回一行數據
/// </summary>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="data">參數數組</param>
/// <returns>DataRow</returns>
public static DataRow ExecuteDataRow(string cmdText, Dictionary<string, string> 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.執行數據庫操作


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

7.返回SqlDataReader對象


/// <summary>
/// 返回SqlDataReader對象
/// </summary>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="data">傳入的參數</param>
/// <returns>SQLiteDataReader</returns>
public static SQLiteDataReader ExecuteReader(string cmdText, Dictionary<string, string> 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.返回結果集中的第一行第一列,忽略其他行或列


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

9.分頁查詢


/// <summary>
/// 分頁查詢
/// </summary>
/// <param name="recordCount">總記錄數</param>
/// <param name="pageIndex">頁牽引</param>
/// <param name="pageSize">頁大小</param>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="countText">查詢總記錄數的Sql文本</param>
/// <param name="data">命令參數</param>
/// <returns>DataSet</returns>
public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, Dictionary<string, string> 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.重新組織數據庫

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

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

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

你可以在你的程序中約定一個時間間隔執行一次重新組織數據庫的操作,節約空間


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();
 }
}

更多關于C#相關內容感興趣的讀者可查看本站專題:《C#常見數據庫操作技巧匯總》、《C#常見控件用法教程》、《C#窗體操作技巧匯總》、《C#數據結構與算法教程》、《C#面向對象程序設計入門教程》及《C#程序設計之線程使用技巧總結》

希望本文所述對大家C#程序設計有所幫助。

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

這篇文章主要介紹了C# 將Access中以時間段條件查詢的數據添加到ListView中,需要的朋友可以參考下
這篇文章主要介紹了使用C#創建Windows服務的實例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
這篇文章主要介紹了C#身份證識別相關技術詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家詳細介紹了C#中TCP粘包問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了C#實現的海盜分金算法,結合具體實例形式分析了海盜分金算法的原理與C#相應實現技巧,需要的朋友可以參考下
這篇文章主要為大家詳細介紹了C#操作INI配置文件示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 天天爽夜夜爽夜夜爽 | 日韩av在线网址 | 免费视频一区二区 | av在线免费观看网站 | 黄色片毛片 | 综合二区 | 国产午夜精品一区二区三区 | 午夜精品国产精品大乳美女 | 欧美成人精品一区 | 欧美成人精品一区二区三区 | 日韩精品视频网站 | 伊人成人在线视频 | 91爱爱网| 麻豆av在线播放 | 一区二区美女 | 在线免费av网站 | 精品视频一区二区三区四区 | www.精品国产 | 久久久一本 | 日韩精品一区在线 | 国产视频一区在线播放 | 国产区视频在线 | 亚洲小视频在线观看 | 中文字幕在线观看一区二区三区 | 黄色一区二区三区 | 九九视频在线免费观看 | 国产剧情一区 | 一区二区三区久久 | 日韩一区二区在线观看视频 | 成人永久免费 | 四虎永久网址 | 一区二区在线视频 | 国产1区2区 | 免费的黄色小视频 | 中文字幕在线免费播放 | 亚洲一区免费 | 手机看片在线 | 黄大色黄大片女爽一次 | 亚洲精品自拍 | aaa级片 | 在线视频99 |