You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
4.6 KiB
C#

2 years ago
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Rs.DataAccess
{
public class SqliteHelper
{
//从配置文本中读取连接字符串
//public static string connStr = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString;
private readonly static string connStr = "data source=./Config/config.db;version=3;";
private readonly SQLiteTransaction _sqLiteTransaction;
private readonly SQLiteConnection _sqLiteConnection;
private readonly bool _transaction;
/// <summary>
/// 构造函数参数为true,将开启事务模式,否则开启常规模式)
/// </summary>
/// <param name="transaction"></param>
public SqliteHelper(bool transaction = false)
{
_transaction = transaction;
if (transaction)
{
_sqLiteConnection = new SQLiteConnection(connStr);
_sqLiteConnection.Open();
_sqLiteTransaction = _sqLiteConnection.BeginTransaction();
}
}
/// <summary>
/// 返回受影响行数(适用Insert/Update/Delete)
/// </summary>
/// <param name="sql"></param>
/// <param name="ps"></param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, params SQLiteParameter[] ps)
{
if (_transaction)
{
var cmd = new SQLiteCommand(_sqLiteConnection) { CommandText = sql };
cmd.Parameters.AddRange(ps);
cmd.Transaction = _sqLiteTransaction;
return cmd.ExecuteNonQuery();
}
else
{
var cnn = new SQLiteConnection(connStr);
cnn.Open();
var mycommand = new SQLiteCommand(cnn) { CommandText = sql };
mycommand.Parameters.AddRange(ps);
var rowsUpdated = mycommand.ExecuteNonQuery();
cnn.Close();
return rowsUpdated;
}
}
/// <summary>
/// 获取首行首列值的方法
/// </summary>
/// <param name="sql"></param>
/// <param name="ps"></param>
/// <returns></returns>
public object ExecuteScalar(string sql, params SQLiteParameter[] ps)
{
if (_transaction)
{
var cmd = new SQLiteCommand(_sqLiteConnection) { CommandText = sql };
cmd.Parameters.AddRange(ps);
cmd.Transaction = _sqLiteTransaction;
var value = cmd.ExecuteScalar();
return value != null ? value.ToString() : "";
}
else
{
var cnn = new SQLiteConnection(connStr);
cnn.Open();
var mycommand = new SQLiteCommand(cnn) { CommandText = sql };
mycommand.Parameters.AddRange(ps);
var value = mycommand.ExecuteScalar();
cnn.Close();
return value != null ? value.ToString() : "";
}
}
/// <summary>
/// 获取结果集
/// </summary>
/// <param name="sql"></param>
/// <param name="ps"></param>
/// <returns></returns>
public DataTable GetDataTable(string sql, params SQLiteParameter[] ps)
{
if (_transaction)
{
//构造适配器对象
var adapter = new SQLiteDataAdapter(sql, _sqLiteConnection);
var dt = new DataTable();
adapter.SelectCommand.Parameters.AddRange(ps);
adapter.Fill(dt);
return dt;
}
else
{
using (SQLiteConnection conn = new SQLiteConnection(connStr))
{
var adapter = new SQLiteDataAdapter(sql, conn);
var dt = new DataTable();
adapter.SelectCommand.Parameters.AddRange(ps);
adapter.Fill(dt);
return dt;
}
}
}
/// <summary>
/// 提交当前事务并关闭链接。SQLiteTransaction
/// </summary>
public void CommitTransaction()
{
_sqLiteTransaction.Commit();
_sqLiteTransaction.Dispose();
_sqLiteConnection.Close();
_sqLiteConnection.Dispose();
}
}
}