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);
}
}
}
}