using Microsoft.Data.Sqlite; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FAtoPA { class Database { String connectionString = "Data Source=database.db"; /// /// Create Database Object /// public Database() { CreateFSMTable(); CreateModbusTable(); CreateVXTable(); } private bool CreateFSMTable() { //Debug.WriteLine("About to execute CreateFSMTable"); using (var connection = new SqliteConnection(connectionString)) { try { connection.Open(); var createtablecmd = connection.CreateCommand(); createtablecmd.CommandText = "CREATE TABLE IF NOT EXISTS FsmData (SIID TEXT PRIMARY KEY, Enable INTEGER, Description TEXT)"; createtablecmd.ExecuteNonQuery(); Debug.WriteLine("CreateFSMTable success"); return true; } catch (Exception ex) { Debug.WriteLine("Error CreateFSMTable, Exception : " + ex.Message); return false; } } } public bool ClearFSMTable() { using (var connection = new SqliteConnection(connectionString)) { connection.Open(); var deleteCmd = connection.CreateCommand(); deleteCmd.CommandText = "DELETE FROM FsmData"; try { int result = deleteCmd.ExecuteNonQuery(); return (result > 0); } catch (SqliteException e) { Debug.WriteLine("Error deleting FSMData: " + e.Message); } } return false; } public List GetFSMDatas() { List fsmDatas = new List(); using (var connection = new SqliteConnection(connectionString)) { connection.Open(); var selectCmd = connection.CreateCommand(); selectCmd.CommandText = "SELECT * FROM FsmData"; using (var reader = selectCmd.ExecuteReader()) { while (reader.Read()) { FSMData fsmData = new FSMData(reader.GetString(0), reader.GetBoolean(1), reader.GetString(2)); fsmDatas.Add(fsmData); } } } return fsmDatas; } public bool AddFSMData(params FSMData[] data) { using(var connection = new SqliteConnection(connectionString)) { connection.Open(); using (var transaction = connection.BeginTransaction()) { foreach (var item in data) { var insertCmd = connection.CreateCommand(); insertCmd.CommandText = "INSERT INTO FsmData (SIID, Enable, Description) VALUES (@SIID, @Enable, @Description)"; insertCmd.Parameters.AddWithValue("@SIID", item.SIID); insertCmd.Parameters.AddWithValue("@Enable", item.Enable); insertCmd.Parameters.AddWithValue("@Description", item.Description); try { int result = insertCmd.ExecuteNonQuery(); if (result <= 0) { transaction.Rollback(); return false; } } catch (SqliteException e) { Debug.WriteLine("Error inserting FSMData: " + e.Message); transaction.Rollback(); return false; } } transaction.Commit(); } return true; } } public bool RemoveFSMDatabySIID(String SIID) { using (var conn = new SqliteConnection(connectionString)) { conn.Open(); var deleteCmd = conn.CreateCommand(); deleteCmd.CommandText = "DELETE FROM FsmData WHERE SIID = @SIID"; deleteCmd.Parameters.AddWithValue("@SIID", SIID); try { int result = deleteCmd.ExecuteNonQuery(); return (result > 0); } catch (SqliteException e) { Debug.WriteLine("Error deleting FSMData: " + e.Message); return false; } } } private bool CreateModbusTable() { //Debug.WriteLine("About to execute CreateModbusTable"); using (var connection = new SqliteConnection(connectionString)) { try { connection.Open(); var modbuscmd = connection.CreateCommand(); modbuscmd.CommandText = "CREATE TABLE IF NOT EXISTS ModbusData (SIID TEXT PRIMARY KEY, Register INTEGER, Description TEXT)"; modbuscmd.ExecuteNonQuery(); Debug.WriteLine("CreateModbusTable success"); return true; } catch (Exception ex) { Debug.WriteLine("Error CreateModbusTable, Exception : " + ex.Message); return false; } } } public bool ClearModbusTable() { using (var connection = new SqliteConnection(connectionString)) { connection.Open(); var deleteCmd = connection.CreateCommand(); deleteCmd.CommandText = "DELETE FROM ModbusData"; try { int result = deleteCmd.ExecuteNonQuery(); return (result > 0); } catch (SqliteException e) { Debug.WriteLine("Error deleting ModbusData: " + e.Message); } } return false; } public Boolean AddModbusData(params ModbusData[] data) { using (var connection = new SqliteConnection(connectionString)) { connection.Open(); using (var transaction = connection.BeginTransaction()) { foreach (var item in data) { var insertCmd = connection.CreateCommand(); insertCmd.CommandText = "INSERT INTO ModbusData (SIID, Register, Description) VALUES (@SIID, @Register, @Description)"; insertCmd.Parameters.AddWithValue("@SIID", item.SIID); insertCmd.Parameters.AddWithValue("@Register", item.Register); insertCmd.Parameters.AddWithValue("@Description", item.Description); try { int result = insertCmd.ExecuteNonQuery(); if (result <= 0) { transaction.Rollback(); return false; } } catch (SqliteException e) { Debug.WriteLine("Error inserting ModbusData: " + e.Message); transaction.Rollback(); return false; } } transaction.Commit(); } return true; } } public List GetModbusDatas() { List modbusDatas = new List(); using (var connection = new SqliteConnection(connectionString)) { connection.Open(); var selectCmd = connection.CreateCommand(); selectCmd.CommandText = "SELECT * FROM ModbusData"; using (var reader = selectCmd.ExecuteReader()) { while (reader.Read()) { ModbusData modbusdata = new ModbusData(reader.GetString(0), reader.GetFieldValue(1), reader.GetString(2)); modbusDatas.Add(modbusdata); } } } return modbusDatas; } public bool RemoveModbusDatabySIID(String SIID) { using (var conn = new SqliteConnection(connectionString)) { conn.Open(); var deleteCmd = conn.CreateCommand(); deleteCmd.CommandText = "DELETE FROM ModbusData WHERE SIID = @SIID"; deleteCmd.Parameters.AddWithValue("@SIID", SIID); try { int result = deleteCmd.ExecuteNonQuery(); return (result > 0); } catch (SqliteException e) { Debug.WriteLine("Error deleting ModbusData: " + e.Message); return false; } } } private bool CreateVXTable() { //Debug.WriteLine("About to execute CreateVXTable"); using (var connection = new SqliteConnection(connectionString)) { try { connection.Open(); var vxlancmd = connection.CreateCommand(); vxlancmd.CommandText = "CREATE TABLE IF NOT EXISTS VxTable (SIID TEXT PRIMARY KEY, FrameID INTEGER, CIN INTEGER, Description TEXT)"; vxlancmd.ExecuteNonQuery(); Debug.WriteLine("CreateVXTable success"); return true; } catch (Exception ex) { Debug.WriteLine("Error CreateVXTable, Exception : " + ex.Message); return false; } } } public bool ClearVXTable() { using (var connection = new SqliteConnection(connectionString)) { connection.Open(); var deleteCmd = connection.CreateCommand(); deleteCmd.CommandText = "DELETE FROM VxTable"; try { int result = deleteCmd.ExecuteNonQuery(); return (result > 0); } catch (SqliteException e) { Debug.WriteLine("Error deleting VXData: " + e.Message); } } return false; } public List GetVXDatas() { List vxDatas = new List(); using (var connection = new SqliteConnection(connectionString)) { connection.Open(); var selectCmd = connection.CreateCommand(); selectCmd.CommandText = "SELECT * FROM VxTable"; using (var reader = selectCmd.ExecuteReader()) { while (reader.Read()) { VXData vxdata = new VXData(reader.GetString(0), reader.GetByte(1), reader.GetByte(2)); vxDatas.Add(vxdata); } } } return vxDatas; } public bool RemoveVXDatabySIID(String SIID) { using (var conn = new SqliteConnection(connectionString)) { conn.Open(); var deleteCmd = conn.CreateCommand(); deleteCmd.CommandText = "DELETE FROM VxTable WHERE SIID = @SIID"; deleteCmd.Parameters.AddWithValue("@SIID", SIID); try { int result = deleteCmd.ExecuteNonQuery(); return (result > 0); } catch (SqliteException e) { Debug.WriteLine("Error deleting VXData: " + e.Message); return false; } } } public bool AddVXData(params VXData[] data) { using(var connection = new SqliteConnection(connectionString)) { connection.Open(); using (var transaction = connection.BeginTransaction()) { foreach (var item in data) { var insertCmd = connection.CreateCommand(); insertCmd.CommandText = "INSERT INTO VxTable (SIID, FrameID, CIN, Description) VALUES (@SIID, @FrameID, @CIN, @Description)"; insertCmd.Parameters.AddWithValue("@SIID", item.SIID); insertCmd.Parameters.AddWithValue("@FrameID", item.FrameID); insertCmd.Parameters.AddWithValue("@CIN", item.CIN); insertCmd.Parameters.AddWithValue("@Description", item.Description); try { int result = insertCmd.ExecuteNonQuery(); if (result <= 0) { transaction.Rollback(); return false; } } catch (SqliteException e) { Debug.WriteLine("Error inserting VXData: " + e.Message); transaction.Rollback(); return false; } } transaction.Commit(); } return true; } } } class FSMData { public String SIID { get; set; } public Boolean Enable { get; set; } public String Description { get; set; } public String Value { get; set; } public String LastUpdate { get; set; } public FSMData(String siid, Boolean enable, String description) { this.SIID = siid; this.Enable = enable; this.Description = description; this.Value = ""; this.LastUpdate = ""; } public FSMData(String siid) { this.SIID = siid; this.Enable = true; this.Description = ""; this.Value = ""; this.LastUpdate = ""; } public FSMData(String siid, Boolean enable) { this.SIID = siid; this.Enable = enable; this.Description = ""; this.LastUpdate = ""; this.Value = ""; } } class ModbusData { public String SIID { get; set; } public UInt16 Register { get; set; } public String Description { get; set; } public String Value { get; set; } public String LastUpdate { get; set; } public ModbusData(String siid, UInt16 register, String description) { this.SIID = siid; this.Register = register; this.Description = description; this.Value = ""; this.LastUpdate = ""; } public ModbusData(String siid, UInt16 register) { this.SIID = siid; this.Register = register; this.Description = siid + " To " + register; this.Value = ""; this.LastUpdate = ""; } } class VXData { public String SIID { get; set; } public Byte FrameID { get; set; } public Byte CIN { get; set; } public String Description { get; set; } public String Value { get; set; } public String LastUpdate { get; set; } public VXData(String siid, Byte frameid, Byte cin, String Description) { this.SIID = siid; this.FrameID = frameid; this.CIN = cin; this.Description=Description; this.Value = ""; this.LastUpdate = ""; } public VXData(String siid, Byte frameid, Byte cin) { this.SIID = siid; this.FrameID = frameid; this.CIN = cin; this.Description = siid+" To "+ frameid + "." + cin; this.Value = ""; this.LastUpdate = ""; } } }