最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年07月11日 09:31:40   作者:Only Version  
這篇文章主要介紹了C#操作SQLite數(shù)據(jù)庫幫助類,詳細(xì)分析了C#針對sqlite數(shù)據(jù)庫的連接、查詢、分頁等各種常見操作的實現(xiàn)與封裝技巧,需要的朋友可以參考下

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

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

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

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

/// <summary>
/// 獲得連接對象
/// </summary>
/// <returns>SQLiteConnection</returns>
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.準(zhǔn)備操作命令參數(shù),構(gòu)造SQLiteCommand 對象:

/// <summary>
/// 準(zhǔn)備操作命令參數(shù)
/// </summary>
/// <param name="cmd">SQLiteCommand</param>
/// <param name="conn">SQLiteConnection</param>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="data">參數(shù)數(shù)組</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">參數(shù)數(shù)組</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">參數(shù)數(shù)組</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.返回一行數(shù)據(jù) DataRow

/// <summary>
/// 返回一行數(shù)據(jù)
/// </summary>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="data">參數(shù)數(shù)組</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.執(zhí)行數(shù)據(jù)庫操作

/// <summary>
/// 執(zhí)行數(shù)據(jù)庫操作
/// </summary>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="data">傳入的參數(shù)</param>
/// <returns>返回受影響的行數(shù)</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">傳入的參數(shù)</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.返回結(jié)果集中的第一行第一列,忽略其他行或列

/// <summary>
/// 返回結(jié)果集中的第一行第一列,忽略其他行或列
/// </summary>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="data">傳入的參數(shù)</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">總記錄數(shù)</param>
/// <param name="pageIndex">頁牽引</param>
/// <param name="pageSize">頁大小</param>
/// <param name="cmdText">Sql命令文本</param>
/// <param name="countText">查詢總記錄數(shù)的Sql文本</param>
/// <param name="data">命令參數(shù)</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.重新組織數(shù)據(jù)庫

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

當(dāng)你下次插入數(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#相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《C#常見數(shù)據(jù)庫操作技巧匯總》、《C#常見控件用法教程》、《C#窗體操作技巧匯總》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#面向?qū)ο蟪绦蛟O(shè)計入門教程》及《C#程序設(shè)計之線程使用技巧總結(jié)

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

相關(guān)文章

  • C#創(chuàng)建磁性窗體的實現(xiàn)方法

    C#創(chuàng)建磁性窗體的實現(xiàn)方法

    經(jīng)常會遇到一種情況,即當(dāng)拖動一個窗體(主窗體)時,其他窗體(子窗體)隨著該窗體移動,當(dāng)拖動子窗體時,其他窗體將不跟隨移動,這就是磁性窗體,所以本文給大家介紹了C#創(chuàng)建磁性窗體的實現(xiàn)方法,需要的朋友可以參考下
    2024-04-04
  • C#實現(xiàn)六大設(shè)計原則之迪米特法則

    C#實現(xiàn)六大設(shè)計原則之迪米特法則

    這篇文章介紹了C#實現(xiàn)六大設(shè)計原則之迪米特法則的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • C#泛型的逆變協(xié)變之個人理解

    C#泛型的逆變協(xié)變之個人理解

    這篇文章主要介紹了C#泛型的逆變協(xié)變之個人理解,需要的朋友可以參考下
    2023-04-04
  • C# 實現(xiàn)繪制PDF嵌套表格案例詳解

    C# 實現(xiàn)繪制PDF嵌套表格案例詳解

    嵌套表格,顧名思義,就是在一張表格中的特定單元格中再插入一個或者多個表格,本文將為大家介紹C#繪制PDF嵌套表格的代碼示例,需要的同學(xué)可以參考一下
    2021-11-11
  • C#實現(xiàn)Winform版計算器

    C#實現(xiàn)Winform版計算器

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)Winform版計算器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • C#獲取指定目錄下某種格式文件集并備份到指定文件夾

    C#獲取指定目錄下某種格式文件集并備份到指定文件夾

    這篇文章介紹了C#獲取指定目錄下某種格式文件集并備份到指定文件夾的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#常用運算符的優(yōu)先級示例詳解

    C#常用運算符的優(yōu)先級示例詳解

    本文將深入探討C#中38個常用運算符的優(yōu)先級劃分和理解,并提供詳細(xì)的說明和示例,以幫助讀者更好地理解運算符的使用,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • C#實現(xiàn)Ruby的負(fù)數(shù)索引器

    C#實現(xiàn)Ruby的負(fù)數(shù)索引器

    這篇文章主要介紹了C#實現(xiàn)Ruby的負(fù)數(shù)索引器的相關(guān)代碼和使用方法,非常簡單實用,需要的朋友可以參考下
    2016-07-07
  • C# foreach 循環(huán)中獲取索引的實現(xiàn)方式

    C# foreach 循環(huán)中獲取索引的實現(xiàn)方式

    這篇文章主要介紹了C# foreach 循環(huán)中獲取索引的實現(xiàn)方式,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-04-04
  • 實例解析C#設(shè)計模式編程中簡單工廠模式的使用

    實例解析C#設(shè)計模式編程中簡單工廠模式的使用

    這篇文章主要介紹了C#設(shè)計模式編程中簡單工廠模式的使用,文中也舉了在.NET框架下簡單工廠模式的實現(xiàn)例子,需要的朋友可以參考下
    2016-02-02

最新評論

重庆市| 兴城市| 资源县| 武隆县| 延安市| 循化| 新津县| 洛阳市| 青阳县| 祥云县| 循化| 贵州省| 清徐县| 宜阳县| 革吉县| 洛隆县| 临高县| 江北区| 新兴县| 新泰市| 仁怀市| 攀枝花市| 明星| 绥化市| 尼玛县| 社旗县| 富民县| 潮安县| 绥棱县| 灯塔市| 庆城县| 武汉市| 徐州市| 宁阳县| 巴楚县| 南城县| 通江县| 安康市| 浮山县| 海伦市| 绥宁县|