using System; using System.Data.SQLite; using System.IO; namespace HMI.Simple.Util { public class SerialDataHelper { private static string FileName = "SerialData"; /// /// 防止多线程创建文件(但是不知道teststand会不会多进程调用) /// private static object fileLock = new object(); private static string createTableSql = @"CREATE TABLE IF NOT EXISTS serialData ( id INTEGER PRIMARY KEY AUTOINCREMENT, sn TEXT NOT NULL, station TEXT NOT NULL, step TEXT NOT NULL, limitDown TEXT, limitUp TEXT, unit TEXT, offset TEXT, value TEXT, status TEXT, finalStatus TEXT, consumeTime BIGINT, totalConsumeTime BIGINT, time DATETIME NOT NULL);"; private static string GetConnectionStr(string dbFile) { return $"DataSource={dbFile};Version=3;Pooling=False;Max Pool Size=100"; } private static void CreateDbFile(string dbFile) { lock (fileLock) { if (!File.Exists(dbFile)) { string dir = Path.GetDirectoryName(dbFile); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } SQLiteConnection.CreateFile(dbFile); using (SQLiteConnection conn = new SQLiteConnection()) using (SQLiteCommand cmd = new SQLiteCommand(conn)) { conn.ConnectionString = GetConnectionStr(dbFile); conn.Open(); cmd.CommandText = createTableSql; cmd.ExecuteNonQuery(); } } } } private static string GetDbFile() { string value = RegUtil.GetLocaltion(); string path = Path.Combine(value, "Config", "DataBoard", $"{FileName}_{DateTime.Now:yyyy-MM}.db"); if (!File.Exists(path)) { CreateDbFile(path); } return path; } public static bool InsertSerialData(string sn, string station, string step, string status, out string errMsg) { errMsg = string.Empty; try { string dbFile = GetDbFile(); using (SQLiteConnection conn = new SQLiteConnection()) using (SQLiteCommand cmd = new SQLiteCommand(conn)) { conn.ConnectionString = GetConnectionStr(dbFile); conn.Open(); cmd.CommandText = $@"INSERT INTO serialData (sn, station, step, status, time) VALUES ('{sn}', '{station}', '{step}', '{status}', '{DateTime.Now:yyyy-MM-dd HH:mm:ss}');"; if (cmd.ExecuteNonQuery() > 0) { return true; } errMsg = "插入失败"; return false; } } catch (Exception ex) { errMsg = ex.Message; return false; } } public static bool UpdateStatusBySn(string dbFile, string sn, string status, out string errMsg) { errMsg = string.Empty; try { if (!File.Exists(dbFile)) { errMsg = "数据库文件不存在"; return false; } using (SQLiteConnection conn = new SQLiteConnection()) using (SQLiteCommand cmd = new SQLiteCommand(conn)) { conn.ConnectionString = GetConnectionStr(dbFile); conn.Open(); cmd.CommandText = $@"UPDATE serialData SET status='{status}', time='{DateTime.Now:yyyy-MM-dd HH:mm:ss}' WHERE sn='{sn}';"; if (cmd.ExecuteNonQuery() > 0) { return true; } errMsg = "更新失败"; return false; } } catch (Exception ex) { errMsg = ex.Message; return false; } } } }