C#实现基于SQLite的工具类

SQLite简介

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。

就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。


DbHelperSQLite类的设计

首先在项目中添加System.Data.SQLite.dll的引用

并引用命名空间 using System.Data.SQLite;

简单sql语句执行

 public class DbHelperSQLite
 {
     public static string connectionString = "Data Source=DataSourse.sqlite ;Version=3;";


     /// <summary>
     /// 执行SQL语句,返回影响的记录数
     /// </summary>
     /// <param name="SQLString">SQL语句</param>
     /// <returns>影响的记录数</returns>
     public static int ExecuteSql(string SQLString)
     {
         using (SQLiteConnection connection = new SQLiteConnection(connectionString))
         {
             using (SQLiteCommand cmd = new SQLiteCommand(SQLString, connection))
             {
                 try
                 {
                     connection.Open();
                     int rows = cmd.ExecuteNonQuery();
                     return rows;
                 }
                 catch (System.Data.SQLite.SQLiteException E)
                 {
                     connection.Close();
                    
                     WriteLog.WriteError(E.ToString(), "保存or删除评审意见异常");
                     return 0;
                 }
             }
         }
     }

     /// <summary>
     /// 执行多条SQL语句,实现数据库事务。
     /// </summary>
     /// <param name="SQLStringList">多条SQL语句</param>    
     public static void ExecuteSqlTran(ArrayList SQLStringList)
     {
         using (SQLiteConnection conn = new SQLiteConnection(connectionString))
         {
             conn.Open();
             SQLiteCommand cmd = new SQLiteCommand();
             cmd.Connection = conn;
             SQLiteTransaction tx = conn.BeginTransaction();
             cmd.Transaction = tx;
             try
             {
                 for (int n = 0; n < SQLStringList.Count; n++)
                 {
                     string strsql = SQLStringList[n].ToString();
                     if (strsql.Trim().Length > 1)
                     {
                         cmd.CommandText = strsql;
                         cmd.ExecuteNonQuery();
                     }
                 }
                 tx.Commit();
             }
             catch (System.Data.SQLite.SQLiteException E)
             {
                 tx.Rollback();
                 throw new Exception(E.Message);
             }
         }
     }
     /// <summary>
     /// 执行带一个存储过程参数的的SQL语句。
     /// </summary>
     /// <param name="SQLString">SQL语句</param>
     /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
     /// <returns>影响的记录数</returns>
     public static int ExecuteSql(string SQLString, string content)
     {
         using (SQLiteConnection connection = new SQLiteConnection(connectionString))
         {
             SQLiteCommand cmd = new SQLiteCommand(SQLString, connection);
             SQLiteParameter myParameter = new SQLiteParameter("@content", DbType.String);
             myParameter.Value = content;
             cmd.Parameters.Add(myParameter);
             try
             {
                 connection.Open();
                 int rows = cmd.ExecuteNonQuery();
                 return rows;
             }
             catch (System.Data.SQLite.SQLiteException E)
             {
                 throw new Exception(E.Message);
             }
             finally
             {
                 cmd.Dispose();
                 connection.Close();
             }
         }
     }
     /// <summary>
     /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
     /// </summary>
     /// <param name="strSQL">SQL语句</param>
     /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
     /// <returns>影响的记录数</returns>
     public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
     {
         using (SQLiteConnection connection = new SQLiteConnection(connectionString))
         {
             SQLiteCommand cmd = new SQLiteCommand(strSQL, connection);
             SQLiteParameter myParameter = new SQLiteParameter("@fs", DbType.Binary);
             myParameter.Value = fs;
             cmd.Parameters.Add(myParameter);
             try
             {
                 connection.Open();
                 int rows = cmd.ExecuteNonQuery();
                 return rows;
             }
             catch (System.Data.SQLite.SQLiteException E)
             {
                 throw new Exception(E.Message);
             }
             finally
             {
                 cmd.Dispose();
                 connection.Close();
             }
         }
     }

     /// <summary>
     /// 执行一条计算查询结果语句,返回查询结果(object)。
     /// </summary>
     /// <param name="SQLString">计算查询结果语句</param>
     /// <returns>查询结果(object)</returns>
     public static object GetSingle(string SQLString)
     {
         using (SQLiteConnection connection = new SQLiteConnection(connectionString))
         {
             using (SQLiteCommand cmd = new SQLiteCommand(SQLString, connection))
             {
                 try
                 {
                     connection.Open();
                     object obj = cmd.ExecuteScalar();
                     if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                     {
                         return null;
                     }
                     else
                     {
                         return obj;
                     }
                 }
                 catch (System.Data.SQLite.SQLiteException e)
                 {
                     connection.Close();
                     throw new Exception(e.Message);
                 }
             }
         }
     }
     /// <summary>
     /// 执行查询语句,返回SQLiteDataReader
     /// </summary>
     /// <param name="strSQL">查询语句</param>
     /// <returns>SQLiteDataReader</returns>
     public static SQLiteDataReader ExecuteReader(string strSQL)
     {
         SQLiteConnection connection = new SQLiteConnection(connectionString);
         SQLiteCommand cmd = new SQLiteCommand(strSQL, connection);
         try
         {
             connection.Open();
             SQLiteDataReader myReader = cmd.ExecuteReader();
             return myReader;
         }
         catch (System.Data.SQLite.SQLiteException e)
         {
             throw new Exception(e.Message);
         }

     }
     /// <summary>
     /// 执行查询语句,返回DataSet
     /// </summary>
     /// <param name="SQLString">查询语句</param>
     /// <returns>DataSet</returns>
     public static DataSet Query(string SQLString)
     {
         using (SQLiteConnection connection = new SQLiteConnection(connectionString))
         {
             DataSet ds = new DataSet();
             try
             {
                 connection.Open();
                 SQLiteDataAdapter command = new SQLiteDataAdapter(SQLString, connection);
                 command.Fill(ds, "ds");
             }
             catch (System.Data.SQLite.SQLiteException ex)
             {
                 throw new Exception(ex.Message);
             }
             return ds;
         }
     }
}


带参数的sql语句执行

  /// <summary>
  /// 执行SQL语句,返回影响的记录数
  /// </summary>
  /// <param name="SQLString">SQL语句</param>
  /// <returns>影响的记录数</returns>
  public static int ExecuteSql(string SQLString, params SQLiteParameter[] cmdParms)
  {
      using (SQLiteConnection connection = new SQLiteConnection(connectionString))
      {
          using (SQLiteCommand cmd = new SQLiteCommand())
          {
              try
              {
                  PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                  int rows = cmd.ExecuteNonQuery();
                  cmd.Parameters.Clear();
                  return rows;
              }
              catch (System.Data.SQLite.SQLiteException E)
              {
                  throw new Exception(E.Message);
              }
          }
      }
  }


  /// <summary>
  /// 执行多条SQL语句,实现数据库事务。
  /// </summary>
  /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SQLiteParameter[])</param>
  public static void ExecuteSqlTran(Hashtable SQLStringList)
  {
      using (SQLiteConnection conn = new SQLiteConnection(connectionString))
      {
          conn.Open();
          using (SQLiteTransaction trans = conn.BeginTransaction())
          {
              SQLiteCommand cmd = new SQLiteCommand();
              try
              {
                  //循环
                  foreach (DictionaryEntry myDE in SQLStringList)
                  {
                      string cmdText = myDE.Key.ToString();
                      SQLiteParameter[] cmdParms = (SQLiteParameter[])myDE.Value;
                      PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
                      int val = cmd.ExecuteNonQuery();
                      cmd.Parameters.Clear();

                      trans.Commit();
                  }
              }
              catch
              {
                  trans.Rollback();
                  throw;
              }
          }
      }
  }


  /// <summary>
  /// 执行一条计算查询结果语句,返回查询结果(object)。
  /// </summary>
  /// <param name="SQLString">计算查询结果语句</param>
  /// <returns>查询结果(object)</returns>
  public static object GetSingle(string SQLString, params SQLiteParameter[] cmdParms)
  {
      using (SQLiteConnection connection = new SQLiteConnection(connectionString))
      {
          using (SQLiteCommand cmd = new SQLiteCommand())
          {
              try
              {
                  PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                  object obj = cmd.ExecuteScalar();
                  cmd.Parameters.Clear();
                  if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                  {
                      return null;
                  }
                  else
                  {
                      return obj;
                  }
              }
              catch (System.Data.SQLite.SQLiteException e)
              {
                  throw new Exception(e.Message);
              }
          }
      }
  }

  /// <summary>
  /// 执行查询语句,返回SQLiteDataReader
  /// </summary>
  /// <param name="strSQL">查询语句</param>
  /// <returns>SQLiteDataReader</returns>
  public static SQLiteDataReader ExecuteReader(string SQLString, params SQLiteParameter[] cmdParms)
  {
      SQLiteConnection connection = new SQLiteConnection(connectionString);
      SQLiteCommand cmd = new SQLiteCommand();
      try
      {
          PrepareCommand(cmd, connection, null, SQLString, cmdParms);
          SQLiteDataReader myReader = cmd.ExecuteReader();
          cmd.Parameters.Clear();
          return myReader;
      }
      catch (System.Data.SQLite.SQLiteException e)
      {
          throw new Exception(e.Message);
      }

  }

  /// <summary>
  /// 执行查询语句,返回DataSet
  /// </summary>
  /// <param name="SQLString">查询语句</param>
  /// <returns>DataSet</returns>
  public static DataSet Query(string SQLString, params SQLiteParameter[] cmdParms)
  {
      using (SQLiteConnection connection = new SQLiteConnection(connectionString))
      {
          SQLiteCommand cmd = new SQLiteCommand();
          PrepareCommand(cmd, connection, null, SQLString, cmdParms);
          using (SQLiteDataAdapter da = new SQLiteDataAdapter(cmd))
          {
              DataSet ds = new DataSet();
              try
              {
                  da.Fill(ds, "ds");
                  cmd.Parameters.Clear();
              }
              catch (System.Data.SQLite.SQLiteException ex)
              {
                  throw new Exception(ex.Message);
              }
              return ds;
          }
      }
  }


  private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, SQLiteTransaction trans, string cmdText, SQLiteParameter[] cmdParms)
  {
      if (conn.State != ConnectionState.Open)
          conn.Open();
      cmd.Connection = conn;
      cmd.CommandText = cmdText;
      if (trans != null)
          cmd.Transaction = trans;
      cmd.CommandType = CommandType.Text;//cmdType;
      if (cmdParms != null)
      {
          foreach (SQLiteParameter parm in cmdParms)
              cmd.Parameters.Add(parm);
      }
  }

使用示例

 DbHelperSQLite.ExecuteSql(string.Format("delete from table_pdf_review where AuthorName='{0}' and AddTime='{1}'", “作者1”, “2024-08-27 18:18:00”));

  • 20
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值