using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SQLite; using System.Data; namespace OTSCommon.DBOperate { /// /// SQLite 操作类 /// public class SqLiteHelper { /// /// 数据库连接定义 /// private SQLiteConnection dbConnection; /// /// SQL命令定义 /// private SQLiteCommand dbCommand; private SQLiteDataAdapter dataAdapter; /// /// 数据读取定义 /// private SQLiteDataReader dataReader; private DataTable dt; /// /// 创建一个指定名字的数据库 /// /// public static void CreateNewDatabase(string basename) { try { SQLiteConnection.CreateFile(basename); } catch (Exception) { } } /// /// 删除指定的数据库文件 /// /// public void DeleteDataBase(string basename) { try { if (System.IO.File.Exists(basename)) { System.IO.File.Delete(basename); } } catch (Exception) { } } /// /// 构造函数 /// /// 连接SQLite库字符串 public SqLiteHelper(string connectionString) { try { dbConnection = new SQLiteConnection(connectionString); dbConnection.Open(); dbCommand = new SQLiteCommand(); dbCommand.Connection = dbConnection; } catch (Exception) { //Log(e.ToString()); } } /// /// 执行SQL命令返回DataTable /// /// The query. /// SQL命令字符串 public DataTable ExecuteQuery(string queryString) { try { dataAdapter = new SQLiteDataAdapter(queryString, dbConnection); DataSet ds= new DataSet(); dataAdapter.Fill(ds); dt = ds.Tables[0]; } catch /*(Exception e)*/ { //Log(e.Message); } return dt; } public bool SearchTable(string queryString) { try { dataAdapter = new SQLiteDataAdapter(queryString, dbConnection); DataSet ds = new DataSet(); dataAdapter.Fill(ds); return true; } catch { return false; } } public int ExecuteQueryResult(string queryString) { int result = -1; try { //dbCommand = dbConnection.CreateCommand(); dbCommand.CommandText = queryString; result = dbCommand.ExecuteNonQuery(); } catch /*(Exception e)*/ { //Log(e.Message); } return result; } public int ExecuteQueryResult(string queryString,SQLiteTransaction tr) { int result = -1; try { //dbCommand = dbConnection.CreateCommand(); dbCommand.CommandText = queryString; dbCommand.Transaction = tr; result = dbCommand.ExecuteNonQuery(); } catch /*(Exception e)*/ { //Log(e.Message); } return result; } /// /// 关闭数据库连接 /// public void CloseConnection() { //销毁Commend if (dbCommand != null) { dbCommand.Cancel(); } dbCommand = null; //销毁Reader if (dataReader != null) { dataReader.Close(); } dataReader = null; //销毁Connection if (dbConnection != null) { dbConnection.Close(); } dbConnection = null; } /// /// 读取整张数据表 /// /// The full table. /// 数据表名称 public DataTable ReadFullTable(string tableName) { string queryString = "SELECT * FROM " + tableName; return ExecuteQuery(queryString); } /// /// 向指定数据表中插入数据 /// /// The values. /// 数据表名称 /// 插入的数值 public DataTable InsertValues(string tableName, string[] values) { //获取数据表中字段数目 int fieldCount = ReadFullTable(tableName).Columns.Count; //当插入的数据长度不等于字段数目时引发异常 if (values.Length != fieldCount) { throw new SQLiteException("values.Length!=fieldCount"); } string queryString = "INSERT INTO " + tableName + " VALUES (" + "'" + values[0] + "'"; for (int i = 1; i < values.Length; i++) { queryString += ", " + "'" + values[i] + "'"; } queryString += " )"; return ExecuteQuery(queryString); } //public void InsertValuesWithBinary() //{ //} /// /// 更新指定数据表内的数据 /// /// The values. /// 数据表名称 /// 字段名 /// 字段名对应的数据 /// 关键字 /// 关键字对应的值 /// 运算符:=,<,>,...,默认“=” public DataTable UpdateValues(string tableName, string[] colNames, string[] colValues, string key, string value, string operation = "=") { //当字段名称和字段数值不对应时引发异常 if (colNames.Length != colValues.Length) { throw new SQLiteException("colNames.Length!=colValues.Length"); } string queryString = "UPDATE " + tableName + " SET " + colNames[0] + "=" + "'" + colValues[0] + "'"; for (int i = 1; i < colValues.Length; i++) { queryString += ", " + colNames[i] + "=" + "'" + colValues[i] + "'"; } queryString += " WHERE " + key + operation + "'" + value + "'"; return ExecuteQuery(queryString); } /// /// 删除指定数据表内的数据 /// /// The values. /// 数据表名称 /// 字段名 /// 字段名对应的数据 public DataTable DeleteValuesOR(string tableName, string[] colNames, string[] colValues, string[] operations) { //当字段名称和字段数值不对应时引发异常 if (colNames.Length != colValues.Length || operations.Length != colNames.Length || operations.Length != colValues.Length) { throw new SQLiteException("colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length"); } string queryString = "DELETE FROM " + tableName + " WHERE " + colNames[0] + operations[0] + "'" + colValues[0] + "'"; for (int i = 1; i < colValues.Length; i++) { queryString += "OR " + colNames[i] + operations[0] + "'" + colValues[i] + "'"; } return ExecuteQuery(queryString); } /// /// 删除指定数据表内的数据 /// /// The values. /// 数据表名称 /// 字段名 /// 字段名对应的数据 public DataTable DeleteValuesAND(string tableName, string[] colNames, string[] colValues, string[] operations) { //当字段名称和字段数值不对应时引发异常 if (colNames.Length != colValues.Length || operations.Length != colNames.Length || operations.Length != colValues.Length) { throw new SQLiteException("colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length"); } string queryString = "DELETE FROM " + tableName + " WHERE " + colNames[0] + operations[0] + "'" + colValues[0] + "'"; for (int i = 1; i < colValues.Length; i++) { queryString += " AND " + colNames[i] + operations[i] + "'" + colValues[i] + "'"; } return ExecuteQuery(queryString); } /// /// 创建数据表 /// + /// The table. /// 数据表名 /// 字段名 /// 字段名类型 public DataTable CreateTable(string tableName, string[] colNames, string[] colTypes) { string queryString = "CREATE TABLE IF NOT EXISTS " + tableName + "( " + colNames[0] + " " + colTypes[0]; for (int i = 1; i < colNames.Length; i++) { queryString += ", " + colNames[i] + " " + colTypes[i]; } queryString += " ) "; return ExecuteQuery(queryString); } /// /// 删除数据库表 /// /// /// public DataTable DeleteTable(string tableName) { string queryString = "drop table "+ tableName; return ExecuteQuery(queryString); } /// /// Reads the table. /// /// The table. /// Table name. /// Items. /// Col names. /// Operations. /// Col values. public DataTable ReadTable(string tableName, string[] items, string[] colNames, string[] operations, string[] colValues) { string queryString = "SELECT " + items[0]; for (int i = 1; i < items.Length; i++) { queryString += ", " + items[i]; } queryString += " FROM " + tableName + " where 1=1"; //+ " WHERE " + colNames[0] + " " + operations[0] + " " + colValues[0]; for (int i = 0; i < colNames.Length; i++) { queryString += " AND " + colNames[i] + " " + operations[i] + " " + colValues[0] + " "; } return ExecuteQuery(queryString); } /// /// 执行SQL命令,并带有一个BLOB字段对象的参数输入 /// /// /// /// /// public int ExecuteQuery(string queryString, string parmstr, byte[] in_b) { int iresult = -1; try { //dbCommand = dbConnection.CreateCommand(); dbCommand.CommandText = queryString; dbCommand.Parameters.Add(parmstr, System.Data.DbType.Binary).Value = in_b; //dataReader = dbCommand.ExecuteReader(); //or iresult = dbCommand.ExecuteNonQuery(); } catch /*(Exception e)*/ { //Log(e.Message); } return iresult; } /// /// 执行SQL命令,并带有一个BLOB字段对象的参数输入 /// /// /// /// /// public int ExecuteQuery(string queryString, string parmstr, byte[] in_b,SQLiteTransaction tr) { int iresult = -1; try { //dbCommand = dbConnection.CreateCommand(); dbCommand.CommandText = queryString; dbCommand.Transaction = tr; dbCommand.Parameters.Add(parmstr, System.Data.DbType.Binary).Value = in_b; //dataReader = dbCommand.ExecuteReader(); //or iresult = dbCommand.ExecuteNonQuery(); } catch /*(Exception e)*/ { //Log(e.Message); } return iresult; } /// /// 执行SQL命令,并带有两个BLOB字段对象的参数输入 /// /// /// /// /// /// public int ExecuteQuery(string queryString, string parmstr, byte[] in_b, string parmstr2, byte[] in_b2) { int iresult = -1; try { //dbCommand = dbConnection.CreateCommand(); dbCommand.CommandText = queryString; dbCommand.Parameters.Add(parmstr, System.Data.DbType.Binary).Value = in_b; dbCommand.Parameters.Add(parmstr2, System.Data.DbType.Binary).Value = in_b2; //dataReader = dbCommand.ExecuteReader(); //or iresult = dbCommand.ExecuteNonQuery(); } catch /*(Exception e)*/ { //Log(e.Message); } return iresult; } /// /// 执行SQL命令,并带有两个BLOB字段对象的参数输入 /// /// /// /// /// /// public int ExecuteQuery(string queryString, string parmstr, byte[] in_b, string parmstr2, byte[] in_b2,SQLiteTransaction tr) { int iresult = -1; try { //dbCommand = dbConnection.CreateCommand(); dbCommand.CommandText = queryString; dbCommand.Transaction = tr; dbCommand.Parameters.Add(parmstr, System.Data.DbType.Binary).Value = in_b; dbCommand.Parameters.Add(parmstr2, System.Data.DbType.Binary).Value = in_b2; //dataReader = dbCommand.ExecuteReader(); //or iresult = dbCommand.ExecuteNonQuery(); } catch /*(Exception e)*/ { //Log(e.Message); } return iresult; } /// /// 执行SQL命令,并带有三个BLOB字段对象的参数输入 /// /// /// /// /// /// public int ExecuteQuery(string queryString, string parmstr, byte[] in_b, string parmstr2, byte[] in_b2,string parmstr3,byte[] in_b3) { int iresult = -1; try { //dbCommand = dbConnection.CreateCommand(); dbCommand.CommandText = queryString; dbCommand.Parameters.Add(parmstr, System.Data.DbType.Binary).Value = in_b; dbCommand.Parameters.Add(parmstr2, System.Data.DbType.Binary).Value = in_b2; dbCommand.Parameters.Add(parmstr3, System.Data.DbType.Binary).Value = in_b3; //dataReader = dbCommand.ExecuteReader(); //or iresult = dbCommand.ExecuteNonQuery(); } catch /*(Exception e)*/ { //Log(e.Message); } return iresult; } /// /// 执行SQL命令,并带有三个BLOB字段对象的参数输入 /// /// /// /// /// /// public int ExecuteQuery(string queryString, string parmstr, byte[] in_b, string parmstr2, byte[] in_b2, string parmstr3, byte[] in_b3, SQLiteTransaction tr) { int iresult = -1; try { //dbCommand = dbConnection.CreateCommand(); dbCommand.CommandText = queryString; dbCommand.Transaction = tr; dbCommand.Parameters.Add(parmstr, System.Data.DbType.Binary).Value = in_b; dbCommand.Parameters.Add(parmstr2, System.Data.DbType.Binary).Value = in_b2; dbCommand.Parameters.Add(parmstr3, System.Data.DbType.Binary).Value = in_b3; //dataReader = dbCommand.ExecuteReader(); //or iresult = dbCommand.ExecuteNonQuery(); } catch /*(Exception e)*/ { //Log(e.Message); } return iresult; } /// /// 开始事务 /// /// public SQLiteTransaction BeginTranscation() { return dbConnection.BeginTransaction(); } /// /// 提交事务 /// /// public void TranscationCommit(SQLiteTransaction tr ) { tr.Commit(); } /// /// 回滚事务 /// /// public void TranscationRollback(SQLiteTransaction tr) { tr.Rollback(); } ///// ///// 执行多条SQL语句,实现数据库事务。 ///// ///// 多条SQL语句 public void ExecuteSqlTran(System.Collections.ArrayList SQLStringList) { dbConnection.Open(); SQLiteCommand cmd = new SQLiteCommand(); cmd.Connection = dbConnection; SQLiteTransaction tx = dbConnection.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); } } } }