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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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