diff --git a/ProgrammList/ConfigManager/ConfigManager.cs b/ProgrammList/ConfigManager/ConfigManager.cs new file mode 100644 index 0000000..2cef4d8 --- /dev/null +++ b/ProgrammList/ConfigManager/ConfigManager.cs @@ -0,0 +1,17 @@ +using System.Configuration; + +namespace ProgrammList.ConfigManager { + internal class ConfigManager { + public static string GetSetting(string key) { + return ConfigurationManager.AppSettings[key]; + } + + public static void SetSetting(string key, string value) { + Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); + configuration.AppSettings.Settings[key].Value = value; + configuration.Save(ConfigurationSaveMode.Full, true); + ConfigurationManager.RefreshSection("appSettings"); + + } + } +} \ No newline at end of file diff --git a/ProgrammList/Program.cs b/ProgrammList/Program.cs index 72d9117..b2b580f 100644 --- a/ProgrammList/Program.cs +++ b/ProgrammList/Program.cs @@ -1,18 +1,20 @@ -using Microsoft.Extensions.Logging; -using ProgrammList.ListPrograms; +using ProgrammList.ListPrograms; class Program { - static void Main(string[] args) { + public static void Main(string[] args) { + ListPrograms list = new ListPrograms(); - Console.WriteLine("Deleting old data"); + Console.WriteLine("Deleting old data"); list.DeleteOldData(); - string keyname1 = "Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstal"; - Console.WriteLine("Searching for 32 bit"); - list.createList(keyname1, "x86"); - string keyname2 = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"; - Console.WriteLine("Searching for 64 bit"); - list.createList(keyname2, "x64"); - } + string keyname1 = "Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstal"; + Console.WriteLine("Searching for 32 bit"); + list.createList(keyname1, "x86"); + string keyname2 = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"; + Console.WriteLine("Searching for 64 bit"); + list.createList(keyname2, "x64"); } + + +} diff --git a/ProgrammList/list_creation/ListPrograms.cs b/ProgrammList/list_creation/ListPrograms.cs index eaa01d3..0b4ea22 100644 --- a/ProgrammList/list_creation/ListPrograms.cs +++ b/ProgrammList/list_creation/ListPrograms.cs @@ -1,20 +1,43 @@ -using Microsoft.Win32; +using Microsoft.IdentityModel.Tokens; +using Microsoft.Win32; using ProgrammList.sql; using System.Net; + namespace ProgrammList.ListPrograms { internal class ListPrograms { string prgm_path = Directory.GetCurrentDirectory() + "\\"; - string[] keyvaluenames = { "DisplayName", "DisplayVersion", "InstallDate"}; - Mssql sql; + string[] keyvaluenames = { "DisplayName", "DisplayVersion", "InstallDate" }; + private SqlBase sql; - internal ListPrograms() { - sql = new Mssql(); + internal ListPrograms(string sqlType) { + if (sqlType == null) { + Console.WriteLine("SQL Database not defined in app.conf, allowed types:"); + Console.WriteLine("MYSQL"); + Console.WriteLine("MARIADB"); + Console.WriteLine("MSSQL"); + Console.WriteLine("SQLITE"); + throw new ArgumentNullException(); + System.Environment.Exit(13); + } + + if (sqlType.Equals("MYSQL", StringComparison.OrdinalIgnoreCase) || sqlType.Equals("MARIADB", StringComparison.OrdinalIgnoreCase)) { + sql = new Mysql(); + } + else if (sqlType.Equals("MSSQL", StringComparison.OrdinalIgnoreCase)) { + sql = new Mssql(); + } + else if (sqlType.Equals("SQLITE", StringComparison.OrdinalIgnoreCase)) { + string filename = ConfigManager.GetSetting("Filename"); + if (!filename.IsNullOrEmpty()) { + sql = new Sqlite(prgm_path, filename); + } + } } internal void DeleteOldData() { - sql.checkTableExists(); - sql.deleteOldData(Dns.GetHostName()); + sql.CheckTableExists(); + sql.DeleteOldData(Dns.GetHostName()); } internal void createList(string hkey, string bit) { @@ -40,9 +63,9 @@ namespace ProgrammList.ListPrograms { result = String.Join("", value.ToArray()); - if (result.EndsWith(",")) { - result = result.Remove(result.Length - 1); - } + if (result.EndsWith(",")) { + result = result.Remove(result.Length - 1); + } value.Add("PCID", "'" + Dns.GetHostName() + "'"); value.Add("update_date", "'" + DateTime.Now + "'"); diff --git a/ProgrammList/sql/DB.cs b/ProgrammList/sql/DB.cs new file mode 100644 index 0000000..0e2c3a1 --- /dev/null +++ b/ProgrammList/sql/DB.cs @@ -0,0 +1,8 @@ +namespace ProgrammList.sql { + public enum DB { + MYSQL, + MARIADB, + SQLITE, + MSSQL + } +} diff --git a/ProgrammList/sql/Mssql.cs b/ProgrammList/sql/Mssql.cs index 40cbeaf..72e5a0d 100644 --- a/ProgrammList/sql/Mssql.cs +++ b/ProgrammList/sql/Mssql.cs @@ -3,13 +3,9 @@ using Microsoft.Data.SqlClient; namespace ProgrammList.sql { - internal class Mssql { - string[] valuenames = { "PCID", "DisplayName", "DisplayVersion", "InstallDate", "update_date", "APP_Architecture" }; + public class Mssql : SqlBaseAbstract { - public SqlConnection Connection; - string connstring; - - //private static DbConnection instance; + //private static Dbconnection instance; public Mssql() { var builder = new SqlConnectionStringBuilder { DataSource = "localhost", @@ -22,24 +18,9 @@ namespace ProgrammList.sql { connstring = builder.ToString(); } - public void Open() { - Connection = new SqlConnection(connstring); - try { - Connection.Open(); - } - catch (Exception ex) { - Console.Write(ex.ToString()); - } - } - - public void Close() { - Connection.Close(); - } - - - internal void getAllData() { - Open(); - var command = Connection.CreateCommand(); + public void GetAllData() { + Open(DB.MSSQL); + var command = sqlcon.CreateCommand(); command.CommandText = @"SELECT * FROM list"; using (var reader = command.ExecuteReader()) { @@ -49,9 +30,9 @@ namespace ProgrammList.sql { } Close(); } - internal bool getSingleLine(string pcid, string program, string version) { - Open(); - var command = Connection.CreateCommand(); + public bool GetSingleLine(string pcid, string program, string version) { + Open(DB.MSSQL); + var command = sqlcon.CreateCommand(); command.CommandText = @"SELECT * FROM list where PCID like " + pcid + " and DisplayName like " + program + " and DisplayVersion like " + version + ";"; @@ -61,9 +42,9 @@ namespace ProgrammList.sql { return result; } - internal void checkTableExists() { - Open(); - var command = Connection.CreateCommand(); + public void CheckTableExists() { + Open(DB.MSSQL); + var command = sqlcon.CreateCommand(); command.CommandText = "select case when exists (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'prgmlist' AND TABLE_NAME = 'list') then 1 else 0 end"; var returncode = command.ExecuteScalar(); if (returncode != null) { @@ -89,9 +70,9 @@ namespace ProgrammList.sql { } - internal void InsertData(Dictionary valuesqlCommand) { - Open(); - var transaction = Connection.BeginTransaction(); + public void InsertData(Dictionary valuesqlCommand) { + Open(DB.MSSQL); + var transaction = sqlcon.BeginTransaction(); string result = ""; for (int i = 0; i < valuenames.Length; i++) { @@ -107,15 +88,15 @@ namespace ProgrammList.sql { string sqlCommand = "INSERT INTO list(" + cols + ")" + "VALUES(" + result + ")"; - var command = new SqlCommand(sqlCommand, Connection, transaction); + var command = new SqlCommand(sqlCommand, sqlcon, transaction); command.ExecuteNonQuery(); transaction.Commit(); Console.WriteLine(sqlCommand); Close(); } - internal void InsertOrUpdateData(Dictionary value) { - if (getSingleLine(value.GetValueOrDefault("PCID"), value.GetValueOrDefault("DisplayName"), value.GetValueOrDefault("DisplayVersion"))) { + public void InsertOrUpdateData(Dictionary value) { + if (GetSingleLine(value.GetValueOrDefault("PCID"), value.GetValueOrDefault("DisplayName"), value.GetValueOrDefault("DisplayVersion"))) { UpdateData(value); } else { @@ -123,18 +104,18 @@ namespace ProgrammList.sql { } } - internal void deleteOldData(string hostname) { - Open(); - var command = Connection.CreateCommand(); + public void DeleteOldData(string hostname) { + Open(DB.MSSQL); + var command = sqlcon.CreateCommand(); string sqlCommand = @"delete from list where PCID = '" + hostname + "';"; command.CommandText = sqlCommand; command.ExecuteReader(); Close(); } - internal void UpdateData(Dictionary value) { - Open(); - var transaction = Connection.BeginTransaction(); + public void UpdateData(Dictionary value) { + Open(DB.MSSQL); + var transaction = sqlcon.BeginTransaction(); string sqlCommand = @"Update list "; string result = "set "; @@ -152,7 +133,7 @@ namespace ProgrammList.sql { " and DisplayVersion like " + value.GetValueOrDefault("DisplayVersion"); - var command = new SqlCommand(sqlCommand, Connection, transaction); + var command = new SqlCommand(sqlCommand, sqlcon, transaction); for (int i = 0; i < valuenames.Length; i++) { if (valuenames[i] != "PCID") { command.Parameters.AddWithValue("$" + valuenames[i], value.GetValueOrDefault(valuenames[i])); @@ -163,19 +144,5 @@ namespace ProgrammList.sql { transaction.Commit(); Close(); } - - internal void DeleteData(string id) { - Open(); - var command = Connection.CreateCommand(); - command.CommandText = @"SELECT name FROM user WHERE id = $id"; - command.Parameters.AddWithValue("$id", id); - - using (var reader = command.ExecuteReader()) { - while (reader.Read()) { - var name = reader.GetString(0); - } - } - Close(); - } } } diff --git a/ProgrammList/sql/MySql.cs b/ProgrammList/sql/MySql.cs index 729fc6d..2cc5a57 100644 --- a/ProgrammList/sql/MySql.cs +++ b/ProgrammList/sql/MySql.cs @@ -1,47 +1,14 @@ using MySql.Data.MySqlClient; -using System.Data.Common; namespace ProgrammList.sql { - public class Mysql { - - string[] valuenames = { "PCID", "DisplayName", "DisplayVersion", "InstallDate", "update_date", "APP_Architecture" }; - - public MySqlConnection Connection; - - //private static DbConnection instance; - public Mysql() { - //string CnnStr = "Data Source=local;Initial Catalog=programlist;User Id=prgmlist;pwd=G0KaUM7TzgO7ZoPZCifs"; - // instance = new MySqlConnection(CnnStr); - } - - public void Open() { - string connstring = string.Format("Server={0}; database={1}; UID={2}; password={3}", "localhost", "programlist", "prgmlist", "G0KaUM7TzgO7ZoPZCifs"); - Connection = new MySqlConnection(connstring); - Connection.Open(); - } - - public void Close() { - Connection.Close(); - } + internal class Mysql : SqlBaseAbstract { - internal void getAllData() { - Open(); - var command = Connection.CreateCommand(); - command.CommandText = @"SELECT * FROM list"; - - using (var reader = command.ExecuteReader()) { - while (reader.Read()) { - var dataLine = reader.GetString(0); - } - } - Close(); - } - internal Boolean getSingleLine(string pcid, string program, string version) { - Open(); - var command = Connection.CreateCommand(); + public Boolean GetSingleLine(string pcid, string program, string version) { + Open(DB.MYSQL); + var command = mysqlcon.CreateCommand(); command.CommandText = @"SELECT * FROM list where PCID like " + pcid + " and DisplayName like " + program + " and DisplayVersion like " + version + ";"; @@ -51,9 +18,9 @@ namespace ProgrammList.sql { return result; } - internal void checkTableExists() { - Open(); - var command = Connection.CreateCommand(); + public void CheckTableExists() { + Open(DB.MYSQL); + var command = mysqlcon.CreateCommand(); command.CommandText = @"SHOW TABLES LIKE 'list';"; var name = command.ExecuteScalar(); if (name != null && name.ToString() == "list") { @@ -67,9 +34,9 @@ namespace ProgrammList.sql { } - internal void InsertData(Dictionary valuesqlCommand) { - Open(); - var transaction = Connection.BeginTransaction(); + public void InsertData(Dictionary valuesqlCommand) { + Open(DB.MYSQL); + var transaction = mysqlcon.BeginTransaction(); string result = ""; for (int i = 0; i < valuenames.Length; i++) { @@ -85,15 +52,15 @@ namespace ProgrammList.sql { string sqlCommand = "INSERT INTO list(" + cols + ")" + "VALUES(" + result + ")"; - var command = new MySqlCommand(sqlCommand, Connection, transaction); + var command = new MySqlCommand(sqlCommand, mysqlcon, transaction); command.ExecuteNonQuery(); transaction.Commit(); Console.WriteLine(sqlCommand); Close(); } - internal void InsertOrUpdateData(Dictionary value) { - if (getSingleLine(value.GetValueOrDefault("PCID"), value.GetValueOrDefault("DisplayName"), value.GetValueOrDefault("DisplayVersion"))) { + public void InsertOrUpdateData(Dictionary value) { + if (GetSingleLine(value.GetValueOrDefault("PCID"), value.GetValueOrDefault("DisplayName"), value.GetValueOrDefault("DisplayVersion"))) { UpdateData(value); } else { @@ -101,18 +68,9 @@ namespace ProgrammList.sql { } } - internal void deleteOldData(string hostname) { - Open(); - var command = Connection.CreateCommand(); - string sqlCommand = @"delete from list where PCID = '" + hostname + "';"; - command.CommandText = sqlCommand; - command.ExecuteReader(); - Close(); - } - - internal void UpdateData(Dictionary value) { - Open(); - var transaction = Connection.BeginTransaction(); + public void UpdateData(Dictionary value) { + Open(DB.MYSQL); + var transaction = mysqlcon.BeginTransaction(); string sqlCommand = @"Update list "; string result = "set "; @@ -130,7 +88,7 @@ namespace ProgrammList.sql { " and DisplayVersion like " + value.GetValueOrDefault("DisplayVersion"); - var command = new MySqlCommand(sqlCommand, Connection, transaction); + var command = new MySqlCommand(sqlCommand, mysqlcon, transaction); for (int i = 0; i < valuenames.Length; i++) { if (valuenames[i] != "PCID") { command.Parameters.AddWithValue("$" + valuenames[i], value.GetValueOrDefault(valuenames[i])); @@ -142,18 +100,14 @@ namespace ProgrammList.sql { Close(); } - internal void DeleteData(string id) { - Open(); - var command = Connection.CreateCommand(); - command.CommandText = @"SELECT name FROM user WHERE id = $id"; - command.Parameters.AddWithValue("$id", id); - using (var reader = command.ExecuteReader()) { - while (reader.Read()) { - var name = reader.GetString(0); - } - } + public void DeleteOldData(string hostname) { + Open(DB.MYSQL); + var command = mysqlcon.CreateCommand(); + string sqlCommand = @"delete from list where PCID = '" + hostname + "';"; + command.CommandText = sqlCommand; + command.ExecuteReader(); Close(); } } - } +} diff --git a/ProgrammList/sql/SqlBase.cs b/ProgrammList/sql/SqlBase.cs index 65467d6..296bae4 100644 --- a/ProgrammList/sql/SqlBase.cs +++ b/ProgrammList/sql/SqlBase.cs @@ -1,162 +1,21 @@ -using Microsoft.Data.SqlClient; -using Microsoft.Data.Sqlite; -using MySql.Data.MySqlClient; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Transactions; -using System.Xml.Linq; +namespace ProgrammList.sql { -namespace ProgrammList.sql { - - /** - * Basic commands to connect to the Sqlight database - */ - internal class SqlBase { - - SqliteConnection connection; - string prgm_path; - string filename; - - string[] valuenames = { "PCID", "DisplayName", "DisplayVersion", "InstallDate", "update_date", "APP_Architecture" }; - - /** - * Constructor - * - */ - internal SqlBase(string prm_path, string file) { - - prgm_path = prm_path + filename; - filename = file; - - //connection = new SqliteConnection("Data Source=" + prm_path + filename + " ;PRAGMA journal_mode=WAL;"); - connection = new SqliteConnection("Data Source=" + prm_path + filename); - connection.Open(); - } - - internal void getAllData() { - var command = connection.CreateCommand(); - command.CommandText = @"SELECT * FROM list"; - - using (var reader = command.ExecuteReader()) { - while (reader.Read()) { - var dataLine = reader.GetString(0); - } - } - } - internal Boolean getSingleLine(string pcid, string program, string version) { - var command = connection.CreateCommand(); - command.CommandText = @"SELECT * FROM list where PCID like " - + pcid + " and DisplayName like " - + program + " and DisplayVersion like " + version + ";"; + interface SqlBase { - bool result = command.ExecuteReader().Read(); + internal bool GetSingleLine(string pcid, string program, string version); - return result; - } + internal void CheckTableExists(); - internal void checkTableExists() { - var command = connection.CreateCommand(); - command.CommandText = @"SELECT name FROM sqlite_master WHERE type='table' AND name='list';"; - var name = command.ExecuteScalar(); - if (name != null && name.ToString() == "list") { - return; - } - var cols = string.Join(" VARCHAR,", valuenames); - cols = cols + " Varchar"; - command.CommandText = "CREATE TABLE list (" +cols + ")"; - command.ExecuteNonQuery(); - } + internal void InsertData(Dictionary valuesqlCommand); + internal void InsertOrUpdateData(Dictionary value); - internal void InsertData(Dictionary valuesqlCommand) { - var transaction = connection.BeginTransaction(); + internal void DeleteOldData(string hostname); - string result = ""; - for (int i = 0; i < valuenames.Length; i++) { - result += valuesqlCommand.GetValueOrDefault(valuenames[i]); + internal void UpdateData(Dictionary value); - if (i < valuenames.Length -1) { - result += ","; - } - } - - - var cols = String.Join(",", valuenames); - - string sqlCommand = "INSERT INTO list(" + cols + ")" + "VALUES(" + result + ")"; - - var command = new SqliteCommand(sqlCommand, connection, transaction); - Console.WriteLine(sqlCommand); - command.ExecuteNonQuery(); - transaction.Commit(); - } - - internal void InsertOrUpdateData(Dictionary value) { - if (getSingleLine(value.GetValueOrDefault("PCID"), value.GetValueOrDefault("DisplayName"), value.GetValueOrDefault("DisplayVersion"))) { - - Console.WriteLine("Update"); - UpdateData(value); - } - else { - - Console.WriteLine("Insert"); - InsertData(value); - } - } - - internal void deleteOldData(string hostname) { - var command = connection.CreateCommand(); - string sqlCommand = @"delete from list where PCID = '" + hostname + "';"; - command.CommandText = sqlCommand; - command.ExecuteReader(); - } - - internal void UpdateData(Dictionary value) { - var transaction = connection.BeginTransaction(); - string sqlCommand = @"Update list "; - - string result = "set "; - for (int i = 0; i < valuenames.Length; i++) { - result += valuenames[i] + " = " + value.GetValueOrDefault(valuenames[i]); - - if (i < valuenames.Length - 1) { - result += " ,"; - } - } - - sqlCommand = sqlCommand + result; - sqlCommand = sqlCommand + " WHERE PCID = " + value.GetValueOrDefault("PCID") + - " and DisplayName like " + value.GetValueOrDefault("DisplayName") + - " and DisplayVersion like " + value.GetValueOrDefault("DisplayVersion"); - - - var command = new SqliteCommand(sqlCommand, connection, transaction); - for (int i = 0; i < valuenames.Length; i++) { - if (valuenames[i] != "PCID") { - command.Parameters.AddWithValue("$" + valuenames[i], value.GetValueOrDefault(valuenames[i])); - } - } - - Console.WriteLine(command.CommandText); - command.ExecuteNonQuery(); - transaction.Commit(); - } - - internal void DeleteData(string id) { - var command = connection.CreateCommand(); - command.CommandText = @"SELECT name FROM user WHERE id = $id"; - command.Parameters.AddWithValue("$id", id); - - using (var reader = command.ExecuteReader()) { - while (reader.Read()) { - var name = reader.GetString(0); - } - } - } } + } diff --git a/ProgrammList/sql/SqlBaseAbstract.cs b/ProgrammList/sql/SqlBaseAbstract.cs new file mode 100644 index 0000000..10b57b2 --- /dev/null +++ b/ProgrammList/sql/SqlBaseAbstract.cs @@ -0,0 +1,86 @@ +using Microsoft.Data.SqlClient; +using Microsoft.Data.Sqlite; +using MySql.Data.MySqlClient; + +namespace ProgrammList.sql { + + public abstract class SqlBaseAbstract : SqlBase { + + + public string[] valuenames = { "PCID", "DisplayName", "DisplayVersion", "InstallDate", "update_date", "APP_Architecture" }; + public string connstring = null; + public MySqlConnection mysqlcon = null; + public SqlConnection sqlcon = null; + public SqliteConnection sqlitecon = null; + + public void Close() { + if (mysqlcon != null) { + mysqlcon.Close(); + } + else if (sqlcon != null) { + sqlcon.Close(); + } + else if (sqlitecon != null { + sqlitecon.Close(); + } + } + + + public void Open(DB type) { + switch (type) { + case DB.MYSQL: + case DB.MARIADB: + mysqlcon = new MySqlConnection(connstring); + try { + mysqlcon.Open(); + } + catch (Exception ex) { + Console.Write(ex.ToString()); + } + break; + case DB.MSSQL: + sqlcon = new SqlConnection(connstring); + try { + mysqlcon.Open(); + } + catch (Exception ex) { + Console.Write(ex.ToString()); + } + break; + case DB.SQLITE: + sqlitecon = new SqliteConnection(connstring); + try { + mysqlcon.Open(); + } + catch (Exception ex) { + Console.Write(ex.ToString()); + } + break; + } + } + + bool SqlBase.GetSingleLine(string pcid, string program, string version) { + throw new NotImplementedException(); + } + + void SqlBase.CheckTableExists() { + throw new NotImplementedException(); + } + + void SqlBase.InsertData(Dictionary valuesqlCommand) { + throw new NotImplementedException(); + } + + void SqlBase.InsertOrUpdateData(Dictionary value) { + throw new NotImplementedException(); + } + + void SqlBase.DeleteOldData(string hostname) { + throw new NotImplementedException(); + } + + void SqlBase.UpdateData(Dictionary value) { + throw new NotImplementedException(); + } + } +} diff --git a/ProgrammList/sql/Sqlite.cs b/ProgrammList/sql/Sqlite.cs new file mode 100644 index 0000000..2323817 --- /dev/null +++ b/ProgrammList/sql/Sqlite.cs @@ -0,0 +1,130 @@ +using Microsoft.Data.Sqlite; + +namespace ProgrammList.sql { + public class Sqlite : SqlBaseAbstract { + + string filename; + + public Sqlite(string prm_path, string file) { + + string prgm_path = prm_path + filename; + filename = file; + + sqlitecon = new SqliteConnection("Data Source=" + prm_path + filename); + sqlitecon.Open(); + } + + public bool GetSingleLine(string pcid, string program, string version) { + var command = sqlitecon.CreateCommand(); + command.CommandText = @"SELECT * FROM list where PCID like " + + pcid + " and DisplayName like " + + program + " and DisplayVersion like " + version + ";"; + + + bool result = command.ExecuteReader().Read(); + + return result; + } + + public void CheckTableExists() { + var command = sqlitecon.CreateCommand(); + command.CommandText = @"SELECT name FROM sqlite_master WHERE type='table' AND name='list';"; + var name = command.ExecuteScalar(); + if (name != null && name.ToString() == "list") { + return; + } + var cols = string.Join(" VARCHAR,", valuenames); + cols = cols + " Varchar"; + command.CommandText = "CREATE TABLE list (" + cols + ")"; + command.ExecuteNonQuery(); + } + + + public void InsertData(Dictionary valuesqlCommand) { + var transaction = sqlitecon.BeginTransaction(); + + string result = ""; + for (int i = 0; i < valuenames.Length; i++) { + result += valuesqlCommand.GetValueOrDefault(valuenames[i]); + + if (i < valuenames.Length - 1) { + result += ","; + } + } + + + var cols = String.Join(",", valuenames); + + string sqlCommand = "INSERT INTO list(" + cols + ")" + "VALUES(" + result + ")"; + SqliteConnection con; + var command = new SqliteCommand(sqlCommand, sqlitecon, transaction); + Console.WriteLine(sqlCommand); + command.ExecuteNonQuery(); + transaction.Commit(); + } + + public void InsertOrUpdateData(Dictionary value) { + if (GetSingleLine(value.GetValueOrDefault("PCID"), value.GetValueOrDefault("DisplayName"), value.GetValueOrDefault("DisplayVersion"))) { + + Console.WriteLine("Update"); + UpdateData(value); + } + else { + + Console.WriteLine("Insert"); + InsertData(value); + } + } + + public void DeleteOldData(string hostname) { + var command = sqlitecon.CreateCommand(); + string sqlCommand = @"delete from list where PCID = '" + hostname + "';"; + command.CommandText = sqlCommand; + command.ExecuteReader(); + } + + public void UpdateData(Dictionary value) { + var transaction = sqlitecon.BeginTransaction(); + string sqlCommand = @"Update list "; + + string result = "set "; + for (int i = 0; i < valuenames.Length; i++) { + result += valuenames[i] + " = " + value.GetValueOrDefault(valuenames[i]); + + if (i < valuenames.Length - 1) { + result += " ,"; + } + } + + sqlCommand = sqlCommand + result; + sqlCommand = sqlCommand + " WHERE PCID = " + value.GetValueOrDefault("PCID") + + " and DisplayName like " + value.GetValueOrDefault("DisplayName") + + " and DisplayVersion like " + value.GetValueOrDefault("DisplayVersion"); + + + var command = new SqliteCommand(sqlCommand, sqlitecon, transaction); + for (int i = 0; i < valuenames.Length; i++) { + if (valuenames[i] != "PCID") { + command.Parameters.AddWithValue("$" + valuenames[i], value.GetValueOrDefault(valuenames[i])); + } + } + + Console.WriteLine(command.CommandText); + command.ExecuteNonQuery(); + transaction.Commit(); + } + + public void DeleteData(string id) { + var command = sqlitecon.CreateCommand(); + command.CommandText = @"SELECT name FROM user WHERE id = $id"; + command.Parameters.AddWithValue("$id", id); + + using (var reader = command.ExecuteReader()) { + while (reader.Read()) { + var name = reader.GetString(0); + } + } + } + + } +}