using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Pcb.Common
{
///源码下载地址:http://download.csdn.net/detail/kehaigang29/8836171
///dll下载地址:http://download.csdn.net/detail/kehaigang29/8837257
///
/// 本类为SQLite数据库帮助静态类,使用时只需直接调用即可,无需实例化
///
public static class SQLiteHelper
{
///
/// 数据库连接字符串
///
//public static string connectionString = "Data Source=" + ConfigurationManager.AppSettings["SQLite"];
//public static void InitDataBase(string pathAppSet)
//{
// if (!string.IsNullOrWhiteSpace(pathAppSet))
// {
// connectionString = "Data Source=" + ConfigurationManager.AppSettings[pathAppSet];
// }
//}
#region 执行数据库操作(新增、更新或删除),返回影响行数
///
/// 执行数据库操作(新增、更新或删除)
///
/// SqlCommand对象
/// 所受影响的行数
public static int ExecuteNonQuery(SQLiteCommand cmd, string connectionString)
{
int result = 0;
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
using (SQLiteConnection con = new SQLiteConnection(connectionString))
{
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, true, cmd.CommandType, cmd.CommandText);
try
{
result = cmd.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
return result;
}
///
/// 执行数据库操作(新增、更新或删除)
///
/// 执行语句或存储过程名
/// 执行类型(默认语句)
/// 所受影响的行数
public static int ExecuteNonQuery(string commandText, string connectionString, CommandType commandType = CommandType.Text)
{
int result = 0;
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
if (commandText == null || commandText.Length == 0)
throw new ArgumentNullException("commandText");
SQLiteCommand cmd = new SQLiteCommand();
using (SQLiteConnection con = new SQLiteConnection(connectionString))
{
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, true, commandType, commandText);
try
{
result = cmd.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
return result;
}
///
/// 执行数据库操作(新增、更新或删除)
///
/// 执行语句或存储过程名
/// 执行类型(默认语句)
/// SQL参数对象
/// 所受影响的行数
public static int ExecuteNonQuery(string commandText, string connectionString, CommandType commandType = CommandType.Text, params SQLiteParameter[] cmdParms)
{
int result = 0;
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
if (commandText == null || commandText.Length == 0)
throw new ArgumentNullException("commandText");
SQLiteCommand cmd = new SQLiteCommand();
using (SQLiteConnection con = new SQLiteConnection(connectionString))
{
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, true, commandType, commandText, cmdParms);
try
{
result = cmd.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
return result;
}
#endregion
#region 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
///
/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
///
/// SqlCommand对象
/// 查询所得的第1行第1列数据
public static object ExecuteScalar(SQLiteCommand cmd, string connectionString)
{
object result = 0;
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
using (SQLiteConnection con = new SQLiteConnection(connectionString))
{
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, true, cmd.CommandType, cmd.CommandText);
try
{
result = cmd.ExecuteScalar();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
return result;
}
///
/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
///
/// 执行语句或存储过程名
/// 执行类型(默认语句)
/// 查询所得的第1行第1列数据
public static object ExecuteScalar(string commandText, string connectionString, CommandType commandType = CommandType.Text)
{
object result = 0;
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
if (commandText == null || commandText.Length == 0)
throw new ArgumentNullException("commandText");
SQLiteCommand cmd = new SQLiteCommand();
using (SQLiteConnection con = new SQLiteConnection(connectionString))
{
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, true, commandType, commandText);
try
{
result = cmd.ExecuteScalar();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
return result;
}
///
/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
///
/// 执行语句或存储过程名
/// 执行类型(默认语句)
/// SQL参数对象
/// 查询所得的第1行第1列数据
public static object ExecuteScalar(string commandText, string connectionString, CommandType commandType = CommandType.Text, params SQLiteParameter[] cmdParms)
{
object result = 0;
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
if (commandText == null || commandText.Length == 0)
throw new ArgumentNullException("commandText");
SQLiteCommand cmd = new SQLiteCommand();
using (SQLiteConnection con = new SQLiteConnection(connectionString))
{
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, true, commandType, commandText, cmdParms);
try
{
result = cmd.ExecuteScalar();
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
throw ex;
}
}
return result;
}
#endregion
#region 执行数据库查询,返回SqlDataReader对象
///
/// 执行数据库查询,返回SqlDataReader对象
///
/// SqlCommand对象
/// SqlDataReader对象
public static DbDataReader ExecuteReader(SQLiteCommand cmd, string connectionString)
{
DbDataReader reader = null;
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
SQLiteConnection con = new SQLiteConnection(connectionString);
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, false, cmd.CommandType, cmd.CommandText);
try
{
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
throw ex;
}
return reader;
}
///
/// 执行数据库查询,返回SqlDataReader对象
///
/// 执行语句或存储过程名
/// 执行类型(默认语句)
/// SqlDataReader对象
public static DbDataReader ExecuteReader(string commandText, string connectionString, CommandType commandType = CommandType.Text)
{
DbDataReader reader = null;
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
if (commandText == null || commandText.Length == 0)
throw new ArgumentNullException("commandText");
SQLiteConnection con = new SQLiteConnection(connectionString);
SQLiteCommand cmd = new SQLiteCommand();
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, false, commandType, commandText);
try
{
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
throw ex;
}
return reader;
}
///
/// 执行数据库查询,返回SqlDataReader对象
///
/// 执行语句或存储过程名
/// 执行类型(默认语句)
/// SQL参数对象
/// SqlDataReader对象
public static DbDataReader ExecuteReader(string commandText, string connectionString, CommandType commandType = CommandType.Text, params SQLiteParameter[] cmdParms)
{
DbDataReader reader = null;
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
if (commandText == null || commandText.Length == 0)
throw new ArgumentNullException("commandText");
SQLiteConnection con = new SQLiteConnection(connectionString);
SQLiteCommand cmd = new SQLiteCommand();
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms);
try
{
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
throw ex;
}
return reader;
}
#endregion
#region 执行数据库查询,返回DataSet对象
///
/// 执行数据库查询,返回DataSet对象
///
/// SqlCommand对象
/// DataSet对象
public static DataSet ExecuteDataSet(SQLiteCommand cmd, string connectionString)
{
DataSet ds = new DataSet();
SQLiteConnection con = new SQLiteConnection(connectionString);
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, false, cmd.CommandType, cmd.CommandText);
try
{
SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
sda.Fill(ds);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (cmd.Connection != null)
{
if (cmd.Connection.State == ConnectionState.Open)
{
cmd.Connection.Close();
}
}
}
return ds;
}
///
/// 执行数据库查询,返回DataSet对象
///
/// 执行语句或存储过程名
/// 执行类型(默认语句)
/// DataSet对象
public static DataSet ExecuteDataSet(string commandText, string connectionString, CommandType commandType = CommandType.Text)
{
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
if (commandText == null || commandText.Length == 0)
throw new ArgumentNullException("commandText");
DataSet ds = new DataSet();
SQLiteConnection con = new SQLiteConnection(connectionString);
SQLiteCommand cmd = new SQLiteCommand();
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, false, commandType, commandText);
try
{
SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
sda.Fill(ds);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (con != null)
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
}
return ds;
}
///
/// 执行数据库查询,返回DataSet对象
///
/// 执行语句或存储过程名
/// 执行类型(默认语句)
/// SQL参数对象
/// DataSet对象
public static DataSet ExecuteDataSet(string commandText, string connectionString, CommandType commandType = CommandType.Text, params SQLiteParameter[] cmdParms)
{
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
if (commandText == null || commandText.Length == 0)
throw new ArgumentNullException("commandText");
DataSet ds = new DataSet();
SQLiteConnection con = new SQLiteConnection(connectionString);
SQLiteCommand cmd = new SQLiteCommand();
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms);
try
{
SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
sda.Fill(ds);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (con != null)
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
}
return ds;
}
#endregion
#region 执行数据库查询,返回DataTable对象
///
/// 执行数据库查询,返回DataTable对象
///
/// 执行语句或存储过程名
/// 执行类型(默认语句)
/// DataTable对象
public static DataTable ExecuteDataTable(string commandText, string connectionString, CommandType commandType = CommandType.Text)
{
if (connectionString == null || connectionString.Length == 0)
throw new ArgumentNullException("connectionString");
if (commandText == null || commandText.Length == 0)
throw new ArgumentNullException("commandText");
DataTable dt = new DataTable();
SQLiteConnection con = new SQLiteConnection(connectionString);
SQLiteCommand cmd = new SQLiteCommand();
SQLiteTransaction trans = null;
PrepareCommand(cmd, con, ref trans, false, commandType, commandText);
try
{
SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
sda.Fill(dt);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (con != null)
{
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
}
return dt;
}
#endregion
#region 通用分页查询方法
///
/// 通用分页查询方法
///
/// 表名
/// 查询字段名
/// where条件
/// 排序条件
/// 每页数据数量
/// 当前页数
/// 数据总量
/// DataTable数据表
public static DataTable SelectPaging(string tableName, string strColumns, string strWhere, string strOrder, int pageSize, int currentIndex, string connectionString, out int recordOut)
{
DataTable dt = new DataTable();
recordOut = Convert.ToInt32(ExecuteScalar("select count(*) from " + tableName, connectionString, CommandType.Text));
string pagingTemplate = "select {0} from {1} where {2} order by {3} limit {4} offset {5} ";
int offsetCount = (currentIndex - 1) * pageSize;
string commandText = String.Format(pagingTemplate, strColumns, tableName, strWhere, strOrder, pageSize.ToString(), offsetCount.ToString());
using (DbDataReader reader = ExecuteReader(commandText, connectionString, CommandType.Text))
{
if (reader != null)
{
dt.Load(reader);
}
}
return dt;
}
#endregion
#region 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化
///
/// 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化
///
/// Command对象
/// Connection对象
/// Transcation对象
/// 是否使用事务
/// SQL字符串执行类型
/// SQL Text
/// SQLiteParameters to use in the command
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, ref SQLiteTransaction trans, bool useTrans, CommandType cmdType, string cmdText, params SQLiteParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (useTrans)
{
trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);
cmd.Transaction = trans;
}
cmd.CommandType = cmdType;
if (cmdParms != null)
{
foreach (SQLiteParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
#endregion
}
}