using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Acon.UrineAnalyzerPlatform.DataAccess
{
/// <summary>
/// SQLite数据库操作类,长连接模式
/// </summary>
public sealed class SQLiteHelper
{
public static string ConnectionString { get; set; }
private static SQLiteConnection Connection;
static SQLiteHelper()
{
string fileName = Path.Combine(Application.StartupPath, @"Data\\UrineMachine.db");
ConnectionString = string.Format("Data Source={0};{1}", fileName, ";foreign keys=true;");
}
#region 静态方法
private static SQLiteConnection CreateConnection()
{
if (Connection == null)
Connection = new SQLiteConnection(ConnectionString);
return Connection;
}
public static SQLiteTransaction GetTransaction()
{
return CreateConnection().BeginTransaction();
}
private static void PrepareCommand(SQLiteCommand command, SQLiteConnection connection, SQLiteTransaction transaction, CommandType commandType, string commandText, SQLiteParameter[] parms)
{
if (connection.State != ConnectionState.Open) connection.Open();
command.Connection = connection;
//command.CommandTimeout = CommandTimeOut;
// 设置命令文本(存储过程名或SQL语句)
command.CommandText = commandText;
// 分配事务
if (transaction != null)
{
command.Transaction = transaction;
}
// 设置命令类型.
command.CommandType = commandType;
if (parms != null && parms.Length > 0)
{
//预处理SqlParameter参数数组,将为NULL的参数赋值为DBNull.Value;
foreach (SQLiteParameter parameter in parms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
}
command.Parameters.AddRange(parms);
}
}
#region ExecuteNonQuery
public static int ExecuteNonQuery(string commandText, params SQLiteParameter[] parms)
{
return ExecuteNonQuery(CreateConnection(), commandText, parms);
}
public static int ExecuteNonQuery(SQLiteConnection connection, string commandText, params SQLiteParameter[] parms)
{
return ExecuteNonQuery(connection, CommandType.Text, commandText, parms);
}
/// <summary>
/// 执行SQL语句,返回影响的行数
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
/// <param name="commandText">SQL语句或存储过程名称</param>
/// <param name="parms">查询参数</param>
/// <returns>返回影响的行数</returns>
public static int ExecuteNonQuery(SQLiteConnection connection, CommandType commandType, string commandText, params SQLiteParameter[] parms)
{
return ExecuteNonQuery(connection, null, commandType, commandText, parms);
//try
//{
// return ExecuteNonQuery(connection, null, commandType, commandText, parms);
//}
//finally
//{
// connection.Close();
//}
}
/// <summary>
/// 执行SQL语句,返回影响的行数
/// </summary>
/// <param name="transaction">事务</param>
/// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
/// <param name="commandText">SQL语句或存储过程名称</param>
/// <param name="parms">查询参数</param>
/// <returns>返回影响的行数</returns>
public static int ExecuteNonQuery(SQLiteTransaction transaction, CommandType commandType, string commandText, params SQLiteParameter[] parms)
{
return ExecuteNonQuery(transaction.Connection, transaction, commandType, commandText, parms);
}
/// <summary>
/// 执行SQL语句,返回影响的行数
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="transaction">事务</param>
/// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
/// <param name="commandText">SQL语句或存储过程名称</param>
/// <param name="parms">查询参数</param>
/// <returns>返回影响的行数</returns>
private static int ExecuteNonQuery(SQLiteConnection connection, SQLiteTransaction transaction, CommandType commandType, string commandText, params SQLiteParameter[] parms)
{
SQLiteCommand command = new SQLiteCommand();
PrepareCommand(command, connection, transaction, commandType, commandText, parms);
int retval = command.ExecuteNonQuery();
command.Parameters.Clear();
return retval;
}
#endregion ExecuteNonQuery
#region ExecuteScalar
/// <summary>
/// 执行SQL语句,返回结果集中的第一行第一列
/// </summary>
/// <param name="connectionString">数据库连接字符串</param>
/// <param name="commandText">SQL语句</param>
/// <param name="parms">查询参数</param>
/// <returns>返回结果集中的第一行第一列</returns>
public static object ExecuteScalar(string commandText, params SQLiteParameter[] parms)
{
return ExecuteScalar(CreateConnection(), commandText, parms);
}
public static object ExecuteScalar(SQLiteConnection connection, string commandText, SQLiteParameter[] parms)
{
return ExecuteScalar(connection, CommandType.Text, commandText, parms);
}
public static object ExecuteScalar(SQLiteConnection connection, CommandType commandType, string commandText, SQLiteParameter[] parms)
{
SQLiteCommand command = new SQLiteCommand();
PrepareCommand(command, connection, null, commandType, commandText, parms);
object retval = command.ExecuteScalar();
command.Parameters.Clear();
return retval;
}
#endregion
#region ExecuteDataSet
public static DataSet ExecuteDataSet(string commandText, params SQLiteParameter[] parms)
{
return ExecuteDataSet(CreateConnection(), commandText, parms);
}
public static DataSet ExecuteDataSet(SQLiteConnection connection, string commandText, SQLiteParameter[] parms)
{
return ExecuteDataSet(connection, CommandType.Text, commandText, parms);
}
public static DataSet ExecuteDataSet(SQLiteConnection connection, CommandType commandType, string commandText, SQLiteParameter[] parms)
{
return ExecuteDataSet(connection, null, commandType, commandText, parms);
}
/// <summary>
/// 执行SQL语句,返回结果集
/// </summary>
/// <param name="transaction">事务</param>
/// <param name="commandType">命令类型(存储过程,命令文本, 其它.)</param>
/// <param name="commandText">SQL语句或存储过程名称</param>
/// <param name="parms">查询参数</param>
/// <returns>返回结果集</returns>
public static DataSet ExecuteDataSet(SQLiteTransaction transaction, CommandType commandType, string commandText, params SQLiteParameter[] parms)
{
return ExecuteDataSet(transaction.Connection, transaction, commandType, commandText, parms);
}
private static DataSet ExecuteDataSet(SQLiteConnection connection, SQLiteTransaction transaction, CommandType commandType, string commandText, SQLiteParameter[] parms)
{
SQLiteCommand command = new SQLiteCommand();
PrepareCommand(command, connection, transaction, commandType, commandText, parms);
SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
DataSet ds = new DataSet();
adapter.Fill(ds);
command.Parameters.Clear();
return ds;
}
#endregion
#endregion 静态方法
public static void Close()
{
if (Connection != null && Connection.State == ConnectionState.Open)
{
Connection.Close();
System.Data.SQLite.SQLiteConnection.ClearPool(Connection);//清除连接池,否则数据库文件不会被释放。
}
}
}
}
SQLite操作封装-长连接方式
猜你喜欢
转载自blog.csdn.net/zhengxu25689/article/details/79358874
今日推荐
周排行