首页 > 学院 > 开发设计 > 正文

分享一个SqliteHelper类

2019-11-17 03:00:54
字体:
来源:转载
供稿:网友

分享一个SqliteHelper类

分享一个SqliteHelper类

SQLite作为一个本地文件数据库相当好用,小巧、快速、支持事务、关系型,甚至可以运行在Android上。在很久以前的一个项目中,我们用过它来将接收到的数据做本地统计,数据量很大,甚至于我们想自己搞个内存空间专门做缓存,缓存满后再一点点地往SQLite中移,现在看起来是多余的,这也不符合开发的过程。在开发中,应该先把功能做出来,如果有性能问题,再找出解决方法。直接在SQLite中做插入而不是先在内存中做,它的效率已经达到了要求。

现在跟大家分享一个对SQLite操作的帮助类,使用它可以对本地SQLite数据库进行方便的操作。

如有引用,注意写明转自:http://www.VEVb.com/wgp13x/p/3868916.html

关键词:SQLite, C#, sqlite3.dll, SQLite Expert摘要:SQLite作为一个本地文件数据库相当好用,小巧、快速、支持事务、关系型,在之前的一个项目中使用了它,现在把这使用经验总结一下,分享给大家。
  1 using System;  2 using System.Data.SQLite;  3 using System.Data;  4 using System.Data.Common;  5    6 namespace DXPlatformClientFramework.UC.StatAnalyzeCommon  7 {  8     public class SqliteHelper : IDisposable  9     { 10         public SQLiteConnection conn; 11   12         public void Dispose() 13         { 14             Dispose(true); 15             GC.SupPRessFinalize(this);            16         } 17   18         protected virtual void Dispose(bool disposing) 19         { 20             if(disposing) 21                 if(conn != null) 22                 { 23                     conn.Dispose(); 24                     conn = null; 25                 } 26         } 27   28         ~SqliteHelper() 29         { 30             Dispose(false); 31         } 32   33         /// <summary> 34         /// 构造函数。 35         /// </summary> 36         /// <param name="dataBaseName">数据库名</param> 37         public SqliteHelper(string dataBaseName) 38         { 39             string connString = string.Format(@"Data Source={0}", dataBaseName); 40             conn = new SQLiteConnection(connString); 41             conn.Open(); 42         } 43   44         /// <summary> 45         /// 手动打开数据库。 46         /// </summary> 47         public void SqliteOpen() 48         { 49             if(conn != null && conn.State == ConnectionState.Closed) 50                 conn.Open(); 51         } 52   53         /// <summary> 54         /// 通过执行SQL语句,获取表中数据。 55         /// </summary> 56         /// <param name="sError">错误信息</param> 57         /// <param name="sSQL">执行的SQL语句</param> 58         public DataTable GetDataTable(out string sError, string sSQL) 59         { 60             DataTable dt = null; 61             sError = string.Empty; 62             try 63             { 64                 SQLiteCommand cmd = newSQLiteCommand() { CommandText = sSQL, Connection = conn }; 65                 SQLiteDataAdapter dao = newSQLiteDataAdapter(cmd); 66                 dt = newDataTable(); 67                 dao.Fill(dt); 68             } 69             catch(Exception e) 70             { 71                 sError = e.Message; 72             } 73             return dt; 74         } 75   76         /// <summary> 77         /// 通过执行SQL语句,获取表中数据个数。 78         /// </summary> 79         /// <param name="sError">错误信息</param> 80         /// <param name="sSQL">执行的SQL语句</param> 81         public int GetDataCount(out string sError, string sSQL) 82         { 83             DataTable dt = newDataTable(); 84             sError = string.Empty; 85             SQLiteCommand cmd = newSQLiteCommand() { CommandText = sSQL, Connection = conn }; 86             try 87             { 88                 SQLiteDataAdapter dao = new SQLiteDataAdapter(cmd); 89                 dao.Fill(dt); 90                 cmd.Dispose(); 91             } 92             catch(Exception e) 93             { 94                 sError = e.Message; 95             } 96             finally{ cmd.Dispose(); } 97             return int.Parse(dt.Rows[0][0].ToString()); 98         } 99  100         /// <summary>101         /// 通过执行SQL语句,执行insert,update,delete 动作,也可以使用事务。102         /// </summary>103         /// <param name="sError">错误信息</param>104         /// <param name="sSQL">执行的SQL语句</param>105         /// <param name="bUseTransaction">是否使用事务</param>106         public bool UpdateData(out string sError, string sSQL, bool bUseTransaction=false)108     {109             bool iResult = false;110             sError = string.Empty;111             if(!bUseTransaction)112             {113                 try114                 {                   115                     SQLiteCommand comm = new SQLiteCommand(conn) { CommandText = sSQL };116                     iResult = comm.ExecuteNonQuery()>0;117                     comm.Dispose();118                 }119                 catch(Exception ex)120                 {121                     sError = ex.Message;122                 }123             }124             else// 使用事务125             {126                 DbTransaction trans = null;127                 trans = conn.BeginTransaction();128                 SQLiteCommand comm = new SQLiteCommand(conn) { CommandText = sSQL };129                 try130                 { 131                     iResult = comm.ExecuteNonQuery()>0;132                     trans.Commit();133                  }134                 catch(Exception ex)135                 {136                     sError = ex.Message;137                     iResult = false;138                     trans.Rollback();139                 }140                 finally{comm.Dispose();trans.Dispose();}141             }142             return iResult;143         }144  145         /// <summary>146         /// 使用事务执行多条相同的带参数的SQL语句。147         /// </summary>148         /// <param name="sqlString">SQL语句</param>149         /// <param name="sqLiteParameters">每次SQL执行的参数</param>150         public void ExecuteSqlTran(string sqlString, object[][] sqLiteParameters)151         {152             if(sqLiteParameters.Length == 0)153                 return;154             using(DbTransaction trans = conn.BeginTransaction())155             {156                 if(conn.State != ConnectionState.Open)157                     conn.Open();158                 SQLiteCommand cmd = conn.CreateCommand();159                 cmd.Connection = conn;160                 try161                 {162                     for(inti = 0; i < sqLiteParameters[0].Length; i++)163                     {164                         cmd.Parameters.Add(cmd.CreateParameter());165                     }166                     //循环167                     foreach(object[] sqlParameters insqLiteParameters)168                     {169                         ExecuteSqlNonQuery(cmd, sqlString, sqlParameters);170                     }171                     trans.Commit();172                 }173                 catch(Exception ex)174                 {175                     trans.Rollback();176                     throw;177                 }178                 finally179                 {180                     cmd.Dispose();trans.Dispose();181                 }182             }183         }184  185         /// <summary>186         /// 不使用事务执行一条带参数的SQL语句。187         /// </summary>188         /// <param name="sqlString">SQL语句</param>189         /// <param name="sqLiteParameters">SQL执行的参数</param>190         public void ExecuteSql(string sqlString, object[] sqLiteParameters)191         {192             if(conn.State != ConnectionState.Open)193                 conn.Open();194             SQLiteCommand cmd = conn.CreateCommand();195             cmd.Connection = conn;196             cmd.CommandText = sqlString;197             try198             {199                 for(inti = 0; i < sqLiteParameters.Length; i++)200                 {201                     cmd.Parameters.Add(cmd.CreateParameter());202                     cmd.Parameters[i].Value = sqLiteParameters[i];203                 }204                 cmd.ExecuteNonQuery();205             }206             finally207             {208                 cmd.Dispose();209             }210         }211  212         private void ExecuteSqlNonQuery(SQLiteCommand cmd, string cmdText, object[] cmdParms)214     {215             cmd.CommandText = cmdText;216             if(cmdParms != null)217             {218                 for(int
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表