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.
255 lines
9.9 KiB
255 lines
9.9 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();
|
|
}
|
|
|
|
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 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);
|
|
}
|
|
}
|
|
|
|
}
|
|
|