using System; using System.Collections.Generic; using System.Text; namespace SunlightAggregationTerminal.Class { public class SQLiteConfig() { public static SqliteHelper SQLitedata = null!; //定义数据库 public static SqliteHelper? Config(string dat) { try { SQLitedata = new SqliteHelper(dat); //数据库连接路径(获取各平台的应用数据目录) SQLitedata.Open(); //打开数据库 if (SQLitedata.TableExists("Users")) { CheckAndRepairTableSchema(); } else { CreateFreshUserTable(); } if (SQLitedata.TableExists("Notification")) { CheckAndRepairTableSchemaNotification(); } else { CreateFreshUserTableNotification(); } if (SQLitedata.TableExists("Server")) { CheckAndRepairTableSchemaSERVER(); } else { CreateFreshUserTableSERVER(); } SQLitedata.Close(); return SQLitedata; } catch (Exception) { return null; } } // --- 逻辑分支 表存在,检查字段完整性 --- private static void CheckAndRepairTableSchema() { // 获取现有字段列表 // 使用 PRAGMA table_info 获取结构 string pragmaSql = "PRAGMA table_info('Users');"; // 复用现有的 ExecuteReader 方法 // ExecuteReader 返回 null 代表出错,否则返回 DataReader using (var reader = SQLitedata.ExecuteReader(pragmaSql, null)) { if (reader == null) return; var existingColumns = new List(); while (reader.Read()) { // PRAGMA table_info 返回结果的第2列(Index=1)是列名 string colName = reader.GetString(1); existingColumns.Add(colName); } reader.Close(); // 记得关闭 Reader // 检查并添加缺失字段 (直接拼接 SQL) // 检查 User if (!existingColumns.Contains("User")) { string sql = "ALTER TABLE Users ADD COLUMN User TEXT NOT NULL;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 UserId if (!existingColumns.Contains("UserId")) { string sql = "ALTER TABLE Users ADD COLUMN UserId TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 UserName if (!existingColumns.Contains("UserName")) { string sql = "ALTER TABLE Users ADD COLUMN UserName TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 UserPassword if (!existingColumns.Contains("UserPassword")) { string sql = "ALTER TABLE Users ADD COLUMN UserPassword TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 Enterprise if (!existingColumns.Contains("Enterprise")) { string sql = "ALTER TABLE Users ADD COLUMN Enterprise TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 Department if (!existingColumns.Contains("Department")) { string sql = "ALTER TABLE Users ADD COLUMN Department TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 ServerID if (!existingColumns.Contains("ServerID")) { string sql = "ALTER TABLE Users ADD COLUMN ServerID TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 Group if (!existingColumns.Contains("Groups")) { string sql = "ALTER TABLE Users ADD COLUMN Groups TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 ProxyID if (!existingColumns.Contains("ProxyID")) { string sql = "ALTER TABLE Users ADD COLUMN ProxyID TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 LogNo if (!existingColumns.Contains("LogNo")) { string sql = "ALTER TABLE Users ADD COLUMN LogNo BOOL DEFAULT (0);"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 LocalAreaNetworkMode if (!existingColumns.Contains("LocalAreaNetworkMode")) { string sql = "ALTER TABLE Users ADD COLUMN LocalAreaNetworkMode BOOL DEFAULT (0);"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 LocalAreaNetworkMode if (!existingColumns.Contains("DarkMode")) { string sql = "ALTER TABLE Users ADD COLUMN DarkMode BOOL DEFAULT (0);"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 LocalAreaNetworkMode if (!existingColumns.Contains("MessageNotificationMode")) { string sql = "ALTER TABLE Users ADD COLUMN MessageNotificationMode BOOL DEFAULT (0);"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 GUID if (!existingColumns.Contains("GUID")) { string sql = "ALTER TABLE Users ADD COLUMN GUID TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); string sqlupdata = "UPDATE Users SET GUID = '"+ Models.AppModels.GetAppUniqueId() + "';"; SQLitedata.ExecuteNonQuery(sqlupdata, null); } } } private static void CheckAndRepairTableSchemaNotification() { // 获取现有字段列表 // 使用 PRAGMA table_info 获取结构 string pragmaSql = "PRAGMA table_info('Notification');"; // 复用现有的 ExecuteReader 方法 // ExecuteReader 返回 null 代表出错,否则返回 DataReader using (var reader = SQLitedata.ExecuteReader(pragmaSql, null)) { if (reader == null) return; var existingColumns = new List(); while (reader.Read()) { // PRAGMA table_info 返回结果的第2列(Index=1)是列名 string colName = reader.GetString(1); existingColumns.Add(colName); } reader.Close(); // 记得关闭 Reader // 检查并添加缺失字段 (直接拼接 SQL) // 检查 Title if (!existingColumns.Contains("Title")) { string sql = "ALTER TABLE Notification ADD COLUMN Title TEXT NULL;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 Content if (!existingColumns.Contains("Content")) { string sql = "ALTER TABLE Notification ADD COLUMN Content TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 Time if (!existingColumns.Contains("Time")) { string sql = "ALTER TABLE Notification ADD COLUMN Time TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 Type if (!existingColumns.Contains("Type")) { string sql = "ALTER TABLE Notification ADD COLUMN Type INT;"; SQLitedata.ExecuteNonQuery(sql, null); } } } private static void CheckAndRepairTableSchemaSERVER() { // 获取现有字段列表 // 使用 PRAGMA table_info 获取结构 string pragmaSql = "PRAGMA table_info('Server');"; // 复用现有的 ExecuteReader 方法 // ExecuteReader 返回 null 代表出错,否则返回 DataReader using (var reader = SQLitedata.ExecuteReader(pragmaSql, null)) { if (reader == null) return; var existingColumns = new List(); while (reader.Read()) { // PRAGMA table_info 返回结果的第2列(Index=1)是列名 string colName = reader.GetString(1); existingColumns.Add(colName); } reader.Close(); // 记得关闭 Reader // 检查并添加缺失字段 (直接拼接 SQL) if (!existingColumns.Contains("START")) { string sql = "ALTER TABLE Server ADD COLUMN START BOOL DEFAULT (0);"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 Server if (!existingColumns.Contains("Server")) { string sql = "ALTER TABLE Server ADD COLUMN Server TEXT NULL;"; SQLitedata.ExecuteNonQuery(sql, null); } // 检查 ServerID if (!existingColumns.Contains("ServerID")) { string sql = "ALTER TABLE Server ADD COLUMN ServerID TEXT;"; SQLitedata.ExecuteNonQuery(sql, null); } } } // --- 逻辑分支 表不存在,直接创建 --- private static void CreateFreshUserTable() { // 建表语句 string createSql = @" CREATE TABLE Users ( User TEXT NOT NULL, UserId TEXT, UserName TEXT, UserPassword TEXT, Enterprise TEXT, Department TEXT, ServerID TEXT, Groups TEXT, ProxyID TEXT, LogNo BOOL DEFAULT (0), LocalAreaNetworkMode BOOL DEFAULT (0), DarkMode BOOL DEFAULT (0), MessageNotificationMode BOOL DEFAULT (0), GUID TEXT );"; // 复用现有的 ExecuteNonQuery 方法 SQLitedata.ExecuteNonQuery(createSql, null); string Sql = @" INSERT INTO Users (User,UserId ,UserName ,UserPassword ,Enterprise ,Department ,ServerID ,Groups ,ProxyID ,LogNo ,LocalAreaNetworkMode ,DarkMode ,MessageNotificationMode ,GUID )VALUES('SUNLIGHT','SUNLIGHT','SUNLIGHT','SUNLIGHT','SUNLIGHT','ENGINEER','TEST','ENGINEER','',0,0,0,0,'"+ Models.AppModels.GetAppUniqueId() + "');"; // 复用现有的 ExecuteNonQuery 方法 SQLitedata.ExecuteNonQuery(Sql, null); } private static void CreateFreshUserTableNotification() { // 建表语句 string createSql = @" CREATE TABLE Notification ( Id INTEGER PRIMARY KEY AUTOINCREMENT, Title TEXT, Content TEXT, Time TEXT, Type INT );"; // 复用现有的 ExecuteNonQuery 方法 SQLitedata.ExecuteNonQuery(createSql, null); } private static void CreateFreshUserTableSERVER() { // 建表语句 string createSql = @" CREATE TABLE Server ( START BOOL DEFAULT (0), Server TEXT, ServerID TEXT );"; // 复用现有的 ExecuteNonQuery 方法 SQLitedata.ExecuteNonQuery(createSql, null); } } }