整合管理器应用端(MAUI跨平台)
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.

319 lines
12 KiB

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);
}
// 检查 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<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);
}
}
}
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)
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);
}
}
}