From 8d42e5c0d05ca724d43eb307f7f829993f986778 Mon Sep 17 00:00:00 2001 From: Schwirg László Date: Fri, 28 Jun 2024 17:35:25 +0200 Subject: [PATCH] v1.23.0 --- Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------- Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs | 4 ++-- Vrh.Log4Pro.MaintenanceConsole/Tools.cs | 9 ++++++--- 3 files changed, 99 insertions(+), 48 deletions(-) diff --git a/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs b/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs index 6a2fa53..dedc975 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs @@ -251,7 +251,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS foreach (var s in sqld.Xml_SQLScriptList) { ColorConsole.Write(s.Key, ConsoleColor.Yellow, bracket: "[]",suffix:" ",prefix: " "); - ColorConsole.Write($"{s.Description} ({s.Name})", ConsoleColor.Yellow, prefix: "Script:"); + var fromfile = string.IsNullOrWhiteSpace(s.FilePath) ? "": $",from:{s.FilePath}"; + ColorConsole.Write($"{s.Description} ({s.Name}{fromfile})", ConsoleColor.Yellow, prefix: "Script:"); ColorConsole.WriteLine(); vlist.Add(s.Key); } @@ -260,9 +261,21 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS if (scriptkey.ToUpper() == "EX") { return o; } SQLDataBase.SQLScript ss = sqld.Xml_SQLScriptList.FirstOrDefault(s=>s.Key==scriptkey); if (!Tools.ResolveArguments(ss.ArgumentParameters, ss.ScriptText,out string ssScriptText)) { return o; } - ColorConsole.WriteLine(ssScriptText); - //SQLDataBaseManagerCore.ExecuteSQLScript(sqld.SQLCS, ssScriptText, ss.CommandTimeout, null); - ColorConsole.WriteLine($"Script executed. Name:{sqld.DBName}, script name: {ss.Name}", ConsoleColor.Green); + if (ss.ScriptText == null) + { + ColorConsole.WriteLine($"Nothing to execute!. Check script definition entry!", ConsoleColor.Red); + } + else + { + ColorConsole.WriteLine(ssScriptText); + var confirm = ColorConsole.ReadLine("Enter CONFIRM to start! [EX]=exit.", ConsoleColor.Yellow, prefix:" ", suffix: " --> ", validitylist: new List() {"CONFIRM"}); + if (confirm == "CONFIRM") + { + SQLDataBaseManagerCore.ExecuteSQLScript(sqld.SQLCS, ssScriptText, ss.CommandTimeout, null); + ColorConsole.WriteLine($"Script executed. Name:{sqld.DBName}, script name: {ss.Name}", ConsoleColor.Green); + } + else {ColorConsole.WriteLine($"Script was NOT executed!", ConsoleColor.Red);} + } } } catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } @@ -361,15 +374,15 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS private static Menu DisplaySQLDataBaseMenu(SQLDataBaseManagerXmlProcessor config = null, string prompt = null, bool silent = false, Menu.SelectionMode selectionmode = Menu.SelectionMode.Multi) { if (config == null) { config = new SQLDataBaseManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); } - List schtskdefList = config.GetDefinitionList(); + List defList = config.GetDefinitionList(); var menufct = new Menu("SQL Databases", prompt) .SetMenuItemDisplayer(DisplayDataBaseInfo) .SetSelectionMode(selectionmode); menufct.ClearMenuItemList(); - foreach (var schtskdef in schtskdefList) + foreach (var def in defList) { - var st = SQLDataBaseManagerCore.CollectDataBaseInfo(schtskdef); - menufct.AddMenuItem(new Menu.Item(schtskdef.Xml_Key, null, null, new Menu.ExecutorParameter(pars: st))); + var st = SQLDataBaseManagerCore.CollectDataBaseInfo(def); + menufct.AddMenuItem(new Menu.Item(def.Xml_Key, null, null, new Menu.ExecutorParameter(pars: st))); } if (!silent) { menufct.DisplayItems(1); } return menufct; @@ -406,7 +419,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS } else if (lineix == 3) { - var phypath = SQLDataBaseManagerCore.GetPhysicalFilesLocation(st.SQLCS); + var phypath = (SQLDataBaseManagerCore.GetPhysicalFilesLocation(st.SQLCS))??"ERR"; ColorConsole.Write($"{phypath}", ConsoleColor.Yellow, prefix: "DB files physical location:", suffix: " "); ColorConsole.WriteLine(" "); return " "; @@ -440,11 +453,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS #region public CollectDataBaseInfo public static SQLDataBase CollectDataBaseInfo(SQLDataBase sqld) { - sqld.Status = GetStatus(sqld.SQLCS); - sqld.PhysicalFilesDirectoryPath = GetPhysicalFilesLocation(sqld.SQLCS); - sqld.DBName = GetDBName(sqld.SQLCS); - sqld.DataSource = GetDataSource(sqld.SQLCS); - sqld.SizeString = GetSize(sqld.SQLCS); + try + { + sqld.Status = GetStatus(sqld.SQLCS); + sqld.PhysicalFilesDirectoryPath = (GetPhysicalFilesLocation(sqld.SQLCS))??""; + sqld.DBName = GetDBName(sqld.SQLCS); + sqld.DataSource = GetDataSource(sqld.SQLCS); + sqld.SizeString = GetSize(sqld.SQLCS); + } + catch + { + sqld.Status = SQLDBStatus.NoAccess; + sqld.PhysicalFilesDirectoryPath = ""; + sqld.DBName = GetDBName(sqld.SQLCS); + sqld.DataSource = GetDataSource(sqld.SQLCS); + sqld.SizeString = ""; + } return sqld; } #endregion public CollectDataBaseInfo @@ -661,7 +685,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS public enum SQLDBStatus { NoAccess, OK, } public static SQLDBStatus GetStatus(string cs) { - try { var s = GetPhysicalFilesLocation(cs); if (s == null) { throw new Exception(); }; return SQLDBStatus.OK; } catch { return SQLDBStatus.NoAccess; } + try + { + var s = GetPhysicalFilesLocation(cs); + if (s == null) { throw new Exception(); }; + return SQLDBStatus.OK; + } + catch { return SQLDBStatus.NoAccess; } } public static Server SQLServerConnect(string sqlconnectionstring) { @@ -693,26 +723,30 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS /// public static string GetSize(string sqlconnectionstring) { - var sqlc = new Microsoft.Data.SqlClient.SqlConnection(sqlconnectionstring); - var dbname = GetDBName(sqlconnectionstring); + try + { + var sqlc = new Microsoft.Data.SqlClient.SqlConnection(sqlconnectionstring); + var dbname = GetDBName(sqlconnectionstring); - var getsizecmd = new Microsoft.Data.SqlClient.SqlCommand ("sp_spaceused", sqlc); - getsizecmd.CommandType = System.Data.CommandType.StoredProcedure; - sqlc.Open(); - var reader = getsizecmd.ExecuteReader(); + var getsizecmd = new Microsoft.Data.SqlClient.SqlCommand("sp_spaceused", sqlc); + getsizecmd.CommandType = System.Data.CommandType.StoredProcedure; + sqlc.Open(); + var reader = getsizecmd.ExecuteReader(); - if (reader.HasRows) - { - while (reader.Read()) + if (reader.HasRows) { - var dbn = reader["database_name"]; - var dbs = reader["database_size"]; - if (Convert.ToString(dbn) == dbname) { return Convert.ToString(dbs); }; + while (reader.Read()) + { + var dbn = reader["database_name"]; + var dbs = reader["database_size"]; + if (Convert.ToString(dbn) == dbname) { return Convert.ToString(dbs); }; + } } + sqlc.Close(); + sqlc.Dispose(); + return "N/A"; } - sqlc.Close(); - sqlc.Dispose(); - return "N/A"; + catch { return "ERR"; } } #endregion GetSize @@ -724,18 +758,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS /// the path, or null, if any error occurs public static string GetPhysicalFilesLocation(string sqlconnectionstring) { - int commandtimeout = 5000; - string scripttext = ""; - scripttext += " DECLARE @physicalpath varchar(1000) = NULL;"; - scripttext += " SELECT @physicalpath = f.physical_name"; - scripttext += " FROM sys.master_files as f inner join sys.databases as d on f.database_id = d.database_id"; - scripttext += " where d.name = '{DATABASE}' and f.type_desc = 'ROWS';"; - scripttext += " SELECT 1 AS RETURNCODE, @physicalpath AS RETURNMESSAGE;"; - var vars = new Dictionary(); - vars.Add(nameof(DBSubstitutionName.DATABASE), GetDBName(sqlconnectionstring)); - vars.Add(nameof(DBSubstitutionName.DATASOURCE), ""); - var result = ExecuteSQLScript(sqlconnectionstring, scripttext, commandtimeout, vars); - if (result.ReturnValue != 0) { return Path.GetDirectoryName(result.ReturnMessage); } else { return null; }; + try + { + int commandtimeout = 5000; + string scripttext = ""; + scripttext += " DECLARE @physicalpath varchar(1000) = NULL;"; + scripttext += " SELECT @physicalpath = f.physical_name"; + scripttext += " FROM sys.master_files as f inner join sys.databases as d on f.database_id = d.database_id"; + scripttext += " where d.name = '{DATABASE}' and f.type_desc = 'ROWS';"; + scripttext += " SELECT 1 AS RETURNCODE, @physicalpath AS RETURNMESSAGE;"; + var vars = new Dictionary(); + vars.Add(nameof(DBSubstitutionName.DATABASE), GetDBName(sqlconnectionstring)); + vars.Add(nameof(DBSubstitutionName.DATASOURCE), ""); + var result = ExecuteSQLScript(sqlconnectionstring, scripttext, commandtimeout, vars); + if (result.ReturnValue != 0) { return Path.GetDirectoryName(result.ReturnMessage); } else { return null; }; + } + catch { return null; } } #endregion GetPhysicalFilesLocation #region DBSubstitution @@ -1295,6 +1333,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS public static class Attributes { public static class Name { public static class Values { public const string DEFAULT = ""; } } + public static class File { public static class Values { public const string DEFAULT = ""; } } public static class Description { public static class Values { public const string DEFAULT = ""; } } public static class ScriptCommandTimeout { public static class Values { public const int DEFAULT = 10000; } } public static class Parameters { public static class Values { public const string DEFAULT = ""; } } @@ -1309,6 +1348,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS { public string Key = ""; public string Name = ""; + public string FilePath = ""; public string Description = ""; public string ScriptText = ""; public int CommandTimeout = 10000; @@ -1322,10 +1362,18 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS Key = $"S{index}"; Name = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.Name), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.Name.Values.DEFAULT); + FilePath = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.File), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.File.Values.DEFAULT); Description= GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.Description), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.Description.Values.DEFAULT); Tools.ResolveArguments(ArgumentParameters, this.Name, out this.Name, interactive: false); Tools.ResolveArguments(ArgumentParameters, this.Description, out this.Description, interactive: false); - ScriptText = GetValue(sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Values.DEFAULT); + if (string.IsNullOrWhiteSpace(this.FilePath)) + { + ScriptText = GetValue(sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Values.DEFAULT); + } + else + { + try { ScriptText = File.ReadAllText(this.FilePath); } catch { ScriptText = null; } + } CommandTimeout = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.ScriptCommandTimeout), sqlscriptXml, defaultcommandtimeout); } } diff --git a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs index 7f35074..e73e9c3 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.22.3.0")] -[assembly: AssemblyFileVersion("1.22.3.0")] +[assembly: AssemblyVersion("1.23.0.0")] +[assembly: AssemblyFileVersion("1.23.0.0")] diff --git a/Vrh.Log4Pro.MaintenanceConsole/Tools.cs b/Vrh.Log4Pro.MaintenanceConsole/Tools.cs index 6f6e3e9..a574108 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Tools.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Tools.cs @@ -330,14 +330,17 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS resolvedtext = stringwithparameters; foreach (var kvp in argumentparametersdictionary) { - if (kvp.Value.StartsWith("?") && interactive) + if (kvp.Value == null) { resolveddictionary.Add(kvp.Key, "");} + else if (kvp.Value.StartsWith("?") && interactive) { + // "?default?prompt" string prompt = $"Enter value for {kvp.Key}:"; string kvpdefaultvalue = null; if (kvp.Value.Length > 1) { - prompt = kvp.Value.Substring(1).Split(new char[] { '?' }, StringSplitOptions.RemoveEmptyEntries)[0]; - if (kvp.Value.Substring(1).IndexOf('?') != -1) kvpdefaultvalue = kvp.Value.Substring(1).Split(new char[] { '?' }, StringSplitOptions.RemoveEmptyEntries)[1]; + var ppp = kvp.Value.Substring(1).Split(new char[] { '?' }, StringSplitOptions.RemoveEmptyEntries); + if (!string.IsNullOrWhiteSpace(ppp[0])) { kvpdefaultvalue = ppp[0]; }; + if (kvp.Value.Substring(1).IndexOf('?') != -1) { prompt = ppp[1]; } } string value = ColorConsole.ReadLine(prompt, ConsoleColor.Yellow, defaultvalue: kvpdefaultvalue); if (value.ToUpper() == "EX") { return false; } -- libgit2 0.21.2