From 0bc404c6c16f6f6ca1581f83c9a4750ae2589ff5 Mon Sep 17 00:00:00 2001 From: Kuro Date: Wed, 5 Mar 2025 00:31:22 +0100 Subject: [PATCH] mssql support start phase --- ProgrammList/Program.cs | 2 +- ProgrammList/list_creation/ListPrograms.cs | 16 +- ProgrammList/sql/Mssql.cs | 171 +++++++++++++++++++++ 3 files changed, 176 insertions(+), 13 deletions(-) create mode 100644 ProgrammList/sql/Mssql.cs diff --git a/ProgrammList/Program.cs b/ProgrammList/Program.cs index 87e8e9d..72d9117 100644 --- a/ProgrammList/Program.cs +++ b/ProgrammList/Program.cs @@ -7,7 +7,7 @@ class Program { ListPrograms list = new ListPrograms(); Console.WriteLine("Deleting old data"); - list.DeleteOldData(); + list.DeleteOldData(); string keyname1 = "Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstal"; Console.WriteLine("Searching for 32 bit"); list.createList(keyname1, "x86"); diff --git a/ProgrammList/list_creation/ListPrograms.cs b/ProgrammList/list_creation/ListPrograms.cs index 46daf82..eaa01d3 100644 --- a/ProgrammList/list_creation/ListPrograms.cs +++ b/ProgrammList/list_creation/ListPrograms.cs @@ -1,23 +1,15 @@ -using Microsoft.Data.SqlClient; -using Microsoft.Win32; +using Microsoft.Win32; using ProgrammList.sql; -using System; -using System.Collections.Generic; -using System.Linq; using System.Net; -using System.Text; -using System.Threading.Tasks; -using static Mysqlx.Expect.Open.Types.Condition.Types; - namespace ProgrammList.ListPrograms { internal class ListPrograms { string prgm_path = Directory.GetCurrentDirectory() + "\\"; string[] keyvaluenames = { "DisplayName", "DisplayVersion", "InstallDate"}; - Mysql sql; + Mssql sql; - internal ListPrograms() { - sql = new Mysql(); + internal ListPrograms() { + sql = new Mssql(); } internal void DeleteOldData() { diff --git a/ProgrammList/sql/Mssql.cs b/ProgrammList/sql/Mssql.cs new file mode 100644 index 0000000..a17824a --- /dev/null +++ b/ProgrammList/sql/Mssql.cs @@ -0,0 +1,171 @@ + + +using Microsoft.Data.SqlClient; +using MySql.Data.MySqlClient; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace ProgrammList.sql { + internal class Mssql { + string[] valuenames = { "PCID", "DisplayName", "DisplayVersion", "InstallDate", "update_date", "APP_Architecture" }; + + public SqlConnection Connection; + string connstring; + + //private static DbConnection instance; + public Mssql() { + var builder = new SqlConnectionStringBuilder { + DataSource = "localhost", + UserID = "sa", + Password = "2677890E23", + InitialCatalog = "prgmlist", + TrustServerCertificate = true + }; + + 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(); + command.CommandText = @"SELECT * FROM list"; + + using (var reader = command.ExecuteReader()) { + while (reader.Read()) { + var dataLine = reader.GetString(0); + } + } + Close(); + } + internal bool getSingleLine(string pcid, string program, string version) { + Open(); + var command = Connection.CreateCommand(); + command.CommandText = @"SELECT * FROM list where PCID like " + + pcid + " and DisplayName like " + + program + " and DisplayVersion like " + version + ";"; + bool result = command.ExecuteReader().Read(); + + Close(); + return result; + } + + internal void checkTableExists() { + Open(); + var command = Connection.CreateCommand(); + command.CommandText = "IF OBJECT_ID('list', 'U') IS NOT NULL BEGIN PRINT '0' END ELSE BEGIN PRINT '1' END"; + var returncode = command.ExecuteScalar(); + if (returncode != null && returncode.ToString() == "1") { + Console.WriteLine("Creating table..."); + } + var cols = string.Join(" VARCHAR(255),", valuenames); + cols = cols + " Varchar(255)"; + command.CommandText = "CREATE TABLE list (" + cols + ")"; + command.ExecuteNonQuery(); + Close(); + } + + + internal void InsertData(Dictionary valuesqlCommand) { + Open(); + var transaction = Connection.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 + ")"; + + var command = new SqlCommand(sqlCommand, Connection, 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"))) { + UpdateData(value); + } + else { + InsertData(value); + } + } + + 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(); + 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 SqlCommand(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(sqlCommand); + command.ExecuteNonQuery(); + 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(); + } + } +}