Files
SunlightAggregationTerminal/Class/SQLiteConfig.cs
T

344 lines
13 KiB
C#
Raw Normal View History

2026-05-01 14:44:49 +08:00
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<string>();
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);
}
// 检查 ServerID
if (!existingColumns.Contains("ServerHTTP"))
{
string sql = "ALTER TABLE Users ADD COLUMN ServerHTTP TEXT;";
SQLitedata.ExecuteNonQuery(sql, null);
}
2026-05-01 14:44:49 +08:00
// 检查 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);
}
// 检查 NotificationID
if (!existingColumns.Contains("NotificationID"))
{
string sql = "ALTER TABLE Users ADD COLUMN NotificationID TEXT;";
SQLitedata.ExecuteNonQuery(sql, null);
}
2026-05-01 14:44:49 +08:00
// 检查 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<string>();
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);
}
// 检查 id
if (!existingColumns.Contains("Id"))
{
string sql = "ALTER TABLE Notification ADD COLUMN Id INTEGER PRIMARY KEY;";
SQLitedata.ExecuteNonQuery(sql, null);
}
2026-05-01 14:44:49 +08:00
}
}
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<string>();
while (reader.Read())
{
// PRAGMA table_info 返回结果的第2列(Index=1)是列名
string colName = reader.GetString(1);
existingColumns.Add(colName);
}
reader.Close(); // 记得关闭 Reader
// 检查并添加缺失字段 (直接拼接 SQL)
2026-05-02 12:52:31 +08:00
if (!existingColumns.Contains("START"))
2026-05-01 14:44:49 +08:00
{
2026-05-02 12:52:31 +08:00
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;";
2026-05-01 14:44:49 +08:00
SQLitedata.ExecuteNonQuery(sql, null);
}
// 检查 ServerID
if (!existingColumns.Contains("ServerID"))
{
string sql = "ALTER TABLE Server ADD COLUMN ServerID TEXT;";
SQLitedata.ExecuteNonQuery(sql, null);
}
if (!existingColumns.Contains("ServerHTTP"))
{
string sql = "ALTER TABLE Server ADD COLUMN ServerHTTP TEXT;";
SQLitedata.ExecuteNonQuery(sql, null);
}
2026-05-01 14:44:49 +08:00
}
}
// --- 逻辑分支 表不存在,直接创建 ---
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,
ServerHTTP TEXT,
2026-05-01 14:44:49 +08:00
Groups TEXT,
ProxyID TEXT,
LogNo BOOL DEFAULT (0),
LocalAreaNetworkMode BOOL DEFAULT (0),
DarkMode BOOL DEFAULT (0),
MessageNotificationMode BOOL DEFAULT (0),
NotificationID TEXT,
2026-05-01 14:44:49 +08:00
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
2026-05-08 02:58:42 +08:00
)VALUES('SUNLIGHT','SUNLIGHT','SUNLIGHT','SUNLIGHT','SUNLIGHT','ENGINEER','127.0.0.1:7789','ENGINEER','',0,0,0,0,'"+ Models.AppModels.GetAppUniqueId() + "');";
2026-05-01 14:44:49 +08:00
// 复用现有的 ExecuteNonQuery 方法
SQLitedata.ExecuteNonQuery(Sql, null);
}
private static void CreateFreshUserTableNotification()
{
// 建表语句
string createSql = @"
CREATE TABLE Notification (
Id INTEGER PRIMARY KEY,
2026-05-01 14:44:49 +08:00
Title TEXT,
Content TEXT,
Time TEXT,
Type INT
);";
// 复用现有的 ExecuteNonQuery 方法
SQLitedata.ExecuteNonQuery(createSql, null);
}
private static void CreateFreshUserTableSERVER()
{
// 建表语句
string createSql = @"
CREATE TABLE Server (
2026-05-02 12:52:31 +08:00
START BOOL DEFAULT (0),
Server TEXT,
ServerID TEXT,
ServerHTTP TEXT
2026-05-01 14:44:49 +08:00
);";
// 复用现有的 ExecuteNonQuery 方法
SQLitedata.ExecuteNonQuery(createSql, null);
}
}
}