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

143 lines
4.3 KiB

using System.Data;
using System.IO;
using Microsoft.Data.Sqlite;
namespace SparkClient.Model.Helper;
/// <summary>
/// SqLite工具类
/// </summary>
public class DataBaseHelper
{
//连接、查询、查询、关闭
public static void InitDataBase()
{
string databasePath = Path.Combine(Common.BasePath, Common.DataBaseTempFileName);
if (File.Exists(databasePath))
return;
else
File.Create(databasePath).Close();
var connection = new SqliteConnection(new SqliteConnectionStringBuilder("data source=" + databasePath)
{
Mode = SqliteOpenMode.ReadWriteCreate,
Password = Common.DatabasePwd
}.ToString());
connection.Open();
using (var command = new SqliteCommand($"ATTACH DATABASE '{Common.DataBaseFileName}' AS {Common.DataBaseName} KEY '{Common.DatabasePwd}';" +
$"SELECT sqlcipher_export('{Common.DataBaseName}');" +
$"DETACH DATABASE {Common.DataBaseName};", connection))
{
command.ExecuteNonQuery();
}
connection.Close();
}
static readonly string password = Common.DatabasePwd;
static readonly string dbPath = Common.DataBaseFileName;
static SqliteConnection connection;
static SqliteTransaction sqliteTransaction;
public static void CreateConnection()
{
connection = new SqliteConnection(new SqliteConnectionStringBuilder("data source=" + DataBaseHelper.dbPath)
{
Mode = SqliteOpenMode.ReadWriteCreate,
Password = password
}.ToString());
if (connection.State != ConnectionState.Open) {
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = "PRAGMA key = '" + password + "';";
command.CommandText += "PRAGMA case_sensitive_like = 1;";
command.ExecuteNonQuery();
}
}
}
public static void CloseConnection()
{
connection.Close();
}
public static void BeginTransaction()
{
if (connection != null)
{
sqliteTransaction = connection.BeginTransaction();
}
}
public static void commit()
{
if (sqliteTransaction != null)
{
sqliteTransaction.Commit();
sqliteTransaction.Dispose();
sqliteTransaction = null;
}
}
public static void rollback()
{
if (sqliteTransaction != null)
{
sqliteTransaction.Rollback();
sqliteTransaction.Dispose();
sqliteTransaction = null;
}
}
public static int ExecuteNonQuery(string sql, SqliteParameter[] sqlParameters = null)
{
int resultCount = -1;
try
{
SqliteCommand cmd = new SqliteCommand();
cmd.Connection = connection;
cmd.CommandText = sql;
cmd.Transaction = sqliteTransaction;
if (sqlParameters != null)
{
cmd.Parameters.AddRange(sqlParameters);
}
resultCount = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return resultCount;
}
//查询全部
public static DataTable ExecuteQuery(String sql, SqliteParameter[] sqlParameters = null)
{
DataTable table = new DataTable();
try
{
SqliteCommand cmd = new SqliteCommand();
cmd.Connection = connection;
cmd.CommandText = sql;
if(sqliteTransaction != null)
{
cmd.Transaction = sqliteTransaction;
}
if (sqlParameters != null)
{
cmd.Parameters.AddRange(sqlParameters);
}
SqliteDataReader reader = cmd.ExecuteReader();
cmd.Parameters.Clear();
table.Load(reader);
return table;
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("检索失败");
Console.WriteLine(ex.ToString());
}
return null;
}
}