SQLiteHelper

using System;
 using System.Data;
 using System.Data.SQLite;
 using System.Configuration;
 using System.Collections;
  
 namespace Common
 {
     public abstract class SQLiteHelper
     {
         //Data Source=db file fullname
         public static readonly string connectionstring = ConfigurationManager.AppSettings["connectionstring"];
  
         private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
  
         public static int ExecuteNonQuery(string connectionstring, CommandType commandType, string commandText, params SQLiteParameter[] commandParameters)
         {
             SQLiteCommand cmd = new SQLiteCommand();
             using (SQLiteConnection cn=new SQLiteConnection(connectionstring))
             {
                 PrepareCommand(cmd, cn, null, commandType, commandText, commandParameters);
                 int result = cmd.ExecuteNonQuery();
                 cmd.Parameters.Clear();
                 return result;
             }
         }
  
         public static int ExecuteNonQuery(SQLiteConnection connection, CommandType commandType, string commandText, params SQLiteParameter[] commandParameters)
         {
             SQLiteCommand cmd = new SQLiteCommand();
  
             PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
             int result = cmd.ExecuteNonQuery();
             cmd.Parameters.Clear();
             return result;
         }
  
         public static int ExecuteNonQuery(SQLiteTransaction trans, CommandType commandType, string commandText, params SQLiteParameter[] commandParameters)
         {
             SQLiteCommand cmd = new SQLiteCommand();
  
             PrepareCommand(cmd, trans.Connection, trans, commandType, commandText, commandParameters);
             int result = cmd.ExecuteNonQuery();
             cmd.Parameters.Clear();
             return result;
         }
  
         public static SQLiteDataReader ExecuteReader(string connectionstring,CommandType commandType,string commandText,params SQLiteParameter [] commandParameters)
         {
             SQLiteCommand cmd = new SQLiteCommand();
             SQLiteConnection cn=new SQLiteConnection(connectionstring);
              
             try
             {
                 PrepareCommand(cmd, cn, null, commandType, commandText, commandParameters);
                 SQLiteDataReader result = null;
                 result = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                 cmd.Parameters.Clear();
                 return result;
             }
             catch
             {
                 cn.Close();
                 throw;
             }
              
         }
  
         public static object ExecuteScalar(string connectionstring, CommandType commandType, string commandText, params SQLiteParameter[] commandParameters)
         {
             SQLiteCommand cmd = new SQLiteCommand();
  
             using (SQLiteConnection cn=new SQLiteConnection(connectionstring))
             {
                 PrepareCommand(cmd, cn, null, commandType, commandText, commandParameters);
                 object result = cmd.ExecuteScalar();
                 cmd.Parameters.Clear();
                 return result;
             }
         }
  
         public static object ExecuteScalar(SQLiteConnection connection, CommandType commandType, string commandText, params SQLiteParameter[] commandParameters)
         {
             SQLiteCommand cmd = new SQLiteCommand();
  
             PrepareCommand(cmd, connection, null, commandType, commandText, commandParameters);
             object result = cmd.ExecuteScalar();
             cmd.Parameters.Clear();
             return result;
         }
  
         public static void CacheParameters(string cacheKey, params SQLiteParameter[] commandParameters)
         {
             parmCache[cacheKey] = commandParameters;
         }
  
         public static SQLiteParameter[] GetCacheParameters(string cacheKey)
         {
             SQLiteParameter[] cacheParams = (SQLiteParameter[])parmCache[cacheKey];
  
             if (cacheParams == null) return null;
  
             int cacheLength=cacheParams.Length;
             SQLiteParameter[] cloneParams=new SQLiteParameter[cacheLength];
  
             for (int i = 0; i < cacheLength; i++)
                 cloneParams[i] = (SQLiteParameter)((ICloneable)cacheParams[i]).Clone();
  
             return cloneParams;
         }
  
         private static void PrepareCommand(SQLiteCommand command, SQLiteConnection connection, SQLiteTransaction trans, CommandType commandType, string commandText, SQLiteParameter[] commandParameters)
         {
             command.Connection = connection;
             command.CommandType = commandType;
             command.CommandText = commandText;
  
             if (commandParameters != null)
                 command.Parameters.AddRange(commandParameters);
  
             if (trans != null)
                 command.Transaction = trans;
  
             if (connection.State != ConnectionState.Open)
                 connection.Open();
         }
     }
 }

  

posted @   Angelasp  阅读(256)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示