using System.Data; using System.IO; using Microsoft.Data.Sqlite; namespace SparkClient.Model.Helper; /// /// SqLite工具类 /// 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; } }