Commit 8d42e5c0d05ca724d43eb307f7f829993f986778

Authored by Schwirg László
1 parent 71ae70b0

v1.23.0

Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs
@@ -251,7 +251,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -251,7 +251,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
251 foreach (var s in sqld.Xml_SQLScriptList) 251 foreach (var s in sqld.Xml_SQLScriptList)
252 { 252 {
253 ColorConsole.Write(s.Key, ConsoleColor.Yellow, bracket: "[]",suffix:" ",prefix: " "); 253 ColorConsole.Write(s.Key, ConsoleColor.Yellow, bracket: "[]",suffix:" ",prefix: " ");
254 - ColorConsole.Write($"{s.Description} ({s.Name})", ConsoleColor.Yellow, prefix: "Script:"); 254 + var fromfile = string.IsNullOrWhiteSpace(s.FilePath) ? "": $",from:{s.FilePath}";
  255 + ColorConsole.Write($"{s.Description} ({s.Name}{fromfile})", ConsoleColor.Yellow, prefix: "Script:");
255 ColorConsole.WriteLine(); 256 ColorConsole.WriteLine();
256 vlist.Add(s.Key); 257 vlist.Add(s.Key);
257 } 258 }
@@ -260,9 +261,21 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -260,9 +261,21 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
260 if (scriptkey.ToUpper() == "EX") { return o; } 261 if (scriptkey.ToUpper() == "EX") { return o; }
261 SQLDataBase.SQLScript ss = sqld.Xml_SQLScriptList.FirstOrDefault(s=>s.Key==scriptkey); 262 SQLDataBase.SQLScript ss = sqld.Xml_SQLScriptList.FirstOrDefault(s=>s.Key==scriptkey);
262 if (!Tools.ResolveArguments(ss.ArgumentParameters, ss.ScriptText,out string ssScriptText)) { return o; } 263 if (!Tools.ResolveArguments(ss.ArgumentParameters, ss.ScriptText,out string ssScriptText)) { return o; }
263 - ColorConsole.WriteLine(ssScriptText);  
264 - //SQLDataBaseManagerCore.ExecuteSQLScript(sqld.SQLCS, ssScriptText, ss.CommandTimeout, null);  
265 - ColorConsole.WriteLine($"Script executed. Name:{sqld.DBName}, script name: {ss.Name}", ConsoleColor.Green); 264 + if (ss.ScriptText == null)
  265 + {
  266 + ColorConsole.WriteLine($"Nothing to execute!. Check script definition entry!", ConsoleColor.Red);
  267 + }
  268 + else
  269 + {
  270 + ColorConsole.WriteLine(ssScriptText);
  271 + var confirm = ColorConsole.ReadLine("Enter CONFIRM to start! [EX]=exit.", ConsoleColor.Yellow, prefix:" ", suffix: " --> ", validitylist: new List<string>() {"CONFIRM"});
  272 + if (confirm == "CONFIRM")
  273 + {
  274 + SQLDataBaseManagerCore.ExecuteSQLScript(sqld.SQLCS, ssScriptText, ss.CommandTimeout, null);
  275 + ColorConsole.WriteLine($"Script executed. Name:{sqld.DBName}, script name: {ss.Name}", ConsoleColor.Green);
  276 + }
  277 + else {ColorConsole.WriteLine($"Script was NOT executed!", ConsoleColor.Red);}
  278 + }
266 } 279 }
267 } 280 }
268 catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } 281 catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); }
@@ -361,15 +374,15 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -361,15 +374,15 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
361 private static Menu DisplaySQLDataBaseMenu(SQLDataBaseManagerXmlProcessor config = null, string prompt = null, bool silent = false, Menu.SelectionMode selectionmode = Menu.SelectionMode.Multi) 374 private static Menu DisplaySQLDataBaseMenu(SQLDataBaseManagerXmlProcessor config = null, string prompt = null, bool silent = false, Menu.SelectionMode selectionmode = Menu.SelectionMode.Multi)
362 { 375 {
363 if (config == null) { config = new SQLDataBaseManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); } 376 if (config == null) { config = new SQLDataBaseManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); }
364 - List<SQLDataBase> schtskdefList = config.GetDefinitionList(); 377 + List<SQLDataBase> defList = config.GetDefinitionList();
365 var menufct = new Menu("SQL Databases", prompt) 378 var menufct = new Menu("SQL Databases", prompt)
366 .SetMenuItemDisplayer(DisplayDataBaseInfo) 379 .SetMenuItemDisplayer(DisplayDataBaseInfo)
367 .SetSelectionMode(selectionmode); 380 .SetSelectionMode(selectionmode);
368 menufct.ClearMenuItemList(); 381 menufct.ClearMenuItemList();
369 - foreach (var schtskdef in schtskdefList) 382 + foreach (var def in defList)
370 { 383 {
371 - var st = SQLDataBaseManagerCore.CollectDataBaseInfo(schtskdef);  
372 - menufct.AddMenuItem(new Menu.Item(schtskdef.Xml_Key, null, null, new Menu.ExecutorParameter(pars: st))); 384 + var st = SQLDataBaseManagerCore.CollectDataBaseInfo(def);
  385 + menufct.AddMenuItem(new Menu.Item(def.Xml_Key, null, null, new Menu.ExecutorParameter(pars: st)));
373 } 386 }
374 if (!silent) { menufct.DisplayItems(1); } 387 if (!silent) { menufct.DisplayItems(1); }
375 return menufct; 388 return menufct;
@@ -406,7 +419,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -406,7 +419,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
406 } 419 }
407 else if (lineix == 3) 420 else if (lineix == 3)
408 { 421 {
409 - var phypath = SQLDataBaseManagerCore.GetPhysicalFilesLocation(st.SQLCS); 422 + var phypath = (SQLDataBaseManagerCore.GetPhysicalFilesLocation(st.SQLCS))??"ERR";
410 ColorConsole.Write($"{phypath}", ConsoleColor.Yellow, prefix: "DB files physical location:", suffix: " "); 423 ColorConsole.Write($"{phypath}", ConsoleColor.Yellow, prefix: "DB files physical location:", suffix: " ");
411 ColorConsole.WriteLine(" "); 424 ColorConsole.WriteLine(" ");
412 return " "; 425 return " ";
@@ -440,11 +453,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -440,11 +453,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
440 #region public CollectDataBaseInfo 453 #region public CollectDataBaseInfo
441 public static SQLDataBase CollectDataBaseInfo(SQLDataBase sqld) 454 public static SQLDataBase CollectDataBaseInfo(SQLDataBase sqld)
442 { 455 {
443 - sqld.Status = GetStatus(sqld.SQLCS);  
444 - sqld.PhysicalFilesDirectoryPath = GetPhysicalFilesLocation(sqld.SQLCS);  
445 - sqld.DBName = GetDBName(sqld.SQLCS);  
446 - sqld.DataSource = GetDataSource(sqld.SQLCS);  
447 - sqld.SizeString = GetSize(sqld.SQLCS); 456 + try
  457 + {
  458 + sqld.Status = GetStatus(sqld.SQLCS);
  459 + sqld.PhysicalFilesDirectoryPath = (GetPhysicalFilesLocation(sqld.SQLCS))??"";
  460 + sqld.DBName = GetDBName(sqld.SQLCS);
  461 + sqld.DataSource = GetDataSource(sqld.SQLCS);
  462 + sqld.SizeString = GetSize(sqld.SQLCS);
  463 + }
  464 + catch
  465 + {
  466 + sqld.Status = SQLDBStatus.NoAccess;
  467 + sqld.PhysicalFilesDirectoryPath = "";
  468 + sqld.DBName = GetDBName(sqld.SQLCS);
  469 + sqld.DataSource = GetDataSource(sqld.SQLCS);
  470 + sqld.SizeString = "";
  471 + }
448 return sqld; 472 return sqld;
449 } 473 }
450 #endregion public CollectDataBaseInfo 474 #endregion public CollectDataBaseInfo
@@ -661,7 +685,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -661,7 +685,13 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
661 public enum SQLDBStatus { NoAccess, OK, } 685 public enum SQLDBStatus { NoAccess, OK, }
662 public static SQLDBStatus GetStatus(string cs) 686 public static SQLDBStatus GetStatus(string cs)
663 { 687 {
664 - try { var s = GetPhysicalFilesLocation(cs); if (s == null) { throw new Exception(); }; return SQLDBStatus.OK; } catch { return SQLDBStatus.NoAccess; } 688 + try
  689 + {
  690 + var s = GetPhysicalFilesLocation(cs);
  691 + if (s == null) { throw new Exception(); };
  692 + return SQLDBStatus.OK;
  693 + }
  694 + catch { return SQLDBStatus.NoAccess; }
665 } 695 }
666 public static Server SQLServerConnect(string sqlconnectionstring) 696 public static Server SQLServerConnect(string sqlconnectionstring)
667 { 697 {
@@ -693,26 +723,30 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -693,26 +723,30 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
693 /// <returns></returns> 723 /// <returns></returns>
694 public static string GetSize(string sqlconnectionstring) 724 public static string GetSize(string sqlconnectionstring)
695 { 725 {
696 - var sqlc = new Microsoft.Data.SqlClient.SqlConnection(sqlconnectionstring);  
697 - var dbname = GetDBName(sqlconnectionstring); 726 + try
  727 + {
  728 + var sqlc = new Microsoft.Data.SqlClient.SqlConnection(sqlconnectionstring);
  729 + var dbname = GetDBName(sqlconnectionstring);
698 730
699 - var getsizecmd = new Microsoft.Data.SqlClient.SqlCommand ("sp_spaceused", sqlc);  
700 - getsizecmd.CommandType = System.Data.CommandType.StoredProcedure;  
701 - sqlc.Open();  
702 - var reader = getsizecmd.ExecuteReader(); 731 + var getsizecmd = new Microsoft.Data.SqlClient.SqlCommand("sp_spaceused", sqlc);
  732 + getsizecmd.CommandType = System.Data.CommandType.StoredProcedure;
  733 + sqlc.Open();
  734 + var reader = getsizecmd.ExecuteReader();
703 735
704 - if (reader.HasRows)  
705 - {  
706 - while (reader.Read()) 736 + if (reader.HasRows)
707 { 737 {
708 - var dbn = reader["database_name"];  
709 - var dbs = reader["database_size"];  
710 - if (Convert.ToString(dbn) == dbname) { return Convert.ToString(dbs); }; 738 + while (reader.Read())
  739 + {
  740 + var dbn = reader["database_name"];
  741 + var dbs = reader["database_size"];
  742 + if (Convert.ToString(dbn) == dbname) { return Convert.ToString(dbs); };
  743 + }
711 } 744 }
  745 + sqlc.Close();
  746 + sqlc.Dispose();
  747 + return "N/A";
712 } 748 }
713 - sqlc.Close();  
714 - sqlc.Dispose();  
715 - return "N/A"; 749 + catch { return "ERR"; }
716 } 750 }
717 #endregion GetSize 751 #endregion GetSize
718 752
@@ -724,18 +758,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -724,18 +758,22 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
724 /// <returns>the path, or null, if any error occurs</returns> 758 /// <returns>the path, or null, if any error occurs</returns>
725 public static string GetPhysicalFilesLocation(string sqlconnectionstring) 759 public static string GetPhysicalFilesLocation(string sqlconnectionstring)
726 { 760 {
727 - int commandtimeout = 5000;  
728 - string scripttext = "";  
729 - scripttext += " DECLARE @physicalpath varchar(1000) = NULL;";  
730 - scripttext += " SELECT @physicalpath = f.physical_name";  
731 - scripttext += " FROM sys.master_files as f inner join sys.databases as d on f.database_id = d.database_id";  
732 - scripttext += " where d.name = '{DATABASE}' and f.type_desc = 'ROWS';";  
733 - scripttext += " SELECT 1 AS RETURNCODE, @physicalpath AS RETURNMESSAGE;";  
734 - var vars = new Dictionary<string, string>();  
735 - vars.Add(nameof(DBSubstitutionName.DATABASE), GetDBName(sqlconnectionstring));  
736 - vars.Add(nameof(DBSubstitutionName.DATASOURCE), "");  
737 - var result = ExecuteSQLScript(sqlconnectionstring, scripttext, commandtimeout, vars);  
738 - if (result.ReturnValue != 0) { return Path.GetDirectoryName(result.ReturnMessage); } else { return null; }; 761 + try
  762 + {
  763 + int commandtimeout = 5000;
  764 + string scripttext = "";
  765 + scripttext += " DECLARE @physicalpath varchar(1000) = NULL;";
  766 + scripttext += " SELECT @physicalpath = f.physical_name";
  767 + scripttext += " FROM sys.master_files as f inner join sys.databases as d on f.database_id = d.database_id";
  768 + scripttext += " where d.name = '{DATABASE}' and f.type_desc = 'ROWS';";
  769 + scripttext += " SELECT 1 AS RETURNCODE, @physicalpath AS RETURNMESSAGE;";
  770 + var vars = new Dictionary<string, string>();
  771 + vars.Add(nameof(DBSubstitutionName.DATABASE), GetDBName(sqlconnectionstring));
  772 + vars.Add(nameof(DBSubstitutionName.DATASOURCE), "");
  773 + var result = ExecuteSQLScript(sqlconnectionstring, scripttext, commandtimeout, vars);
  774 + if (result.ReturnValue != 0) { return Path.GetDirectoryName(result.ReturnMessage); } else { return null; };
  775 + }
  776 + catch { return null; }
739 } 777 }
740 #endregion GetPhysicalFilesLocation 778 #endregion GetPhysicalFilesLocation
741 #region DBSubstitution 779 #region DBSubstitution
@@ -1295,6 +1333,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -1295,6 +1333,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
1295 public static class Attributes 1333 public static class Attributes
1296 { 1334 {
1297 public static class Name { public static class Values { public const string DEFAULT = ""; } } 1335 public static class Name { public static class Values { public const string DEFAULT = ""; } }
  1336 + public static class File { public static class Values { public const string DEFAULT = ""; } }
1298 public static class Description { public static class Values { public const string DEFAULT = ""; } } 1337 public static class Description { public static class Values { public const string DEFAULT = ""; } }
1299 public static class ScriptCommandTimeout { public static class Values { public const int DEFAULT = 10000; } } 1338 public static class ScriptCommandTimeout { public static class Values { public const int DEFAULT = 10000; } }
1300 public static class Parameters { public static class Values { public const string DEFAULT = ""; } } 1339 public static class Parameters { public static class Values { public const string DEFAULT = ""; } }
@@ -1309,6 +1348,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -1309,6 +1348,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
1309 { 1348 {
1310 public string Key = ""; 1349 public string Key = "";
1311 public string Name = ""; 1350 public string Name = "";
  1351 + public string FilePath = "";
1312 public string Description = ""; 1352 public string Description = "";
1313 public string ScriptText = ""; 1353 public string ScriptText = "";
1314 public int CommandTimeout = 10000; 1354 public int CommandTimeout = 10000;
@@ -1322,10 +1362,18 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS @@ -1322,10 +1362,18 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS
1322 1362
1323 Key = $"S{index}"; 1363 Key = $"S{index}";
1324 Name = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.Name), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.Name.Values.DEFAULT); 1364 Name = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.Name), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.Name.Values.DEFAULT);
  1365 + FilePath = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.File), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.File.Values.DEFAULT);
1325 Description= GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.Description), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.Description.Values.DEFAULT); 1366 Description= GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.Description), sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Attributes.Description.Values.DEFAULT);
1326 Tools.ResolveArguments(ArgumentParameters, this.Name, out this.Name, interactive: false); 1367 Tools.ResolveArguments(ArgumentParameters, this.Name, out this.Name, interactive: false);
1327 Tools.ResolveArguments(ArgumentParameters, this.Description, out this.Description, interactive: false); 1368 Tools.ResolveArguments(ArgumentParameters, this.Description, out this.Description, interactive: false);
1328 - ScriptText = GetValue(sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Values.DEFAULT); 1369 + if (string.IsNullOrWhiteSpace(this.FilePath))
  1370 + {
  1371 + ScriptText = GetValue(sqlscriptXml, XmlStructure.SQLDataBase.Scripts.Script.Values.DEFAULT);
  1372 + }
  1373 + else
  1374 + {
  1375 + try { ScriptText = File.ReadAllText(this.FilePath); } catch { ScriptText = null; }
  1376 + }
1329 CommandTimeout = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.ScriptCommandTimeout), sqlscriptXml, defaultcommandtimeout); 1377 CommandTimeout = GetValue(nameof(XmlStructure.SQLDataBase.Scripts.Script.Attributes.ScriptCommandTimeout), sqlscriptXml, defaultcommandtimeout);
1330 } 1378 }
1331 } 1379 }
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices; @@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
32 // You can specify all the values or you can default the Build and Revision Numbers 32 // You can specify all the values or you can default the Build and Revision Numbers
33 // by using the '*' as shown below: 33 // by using the '*' as shown below:
34 // [assembly: AssemblyVersion("1.0.*")] 34 // [assembly: AssemblyVersion("1.0.*")]
35 -[assembly: AssemblyVersion("1.22.3.0")]  
36 -[assembly: AssemblyFileVersion("1.22.3.0")] 35 +[assembly: AssemblyVersion("1.23.0.0")]
  36 +[assembly: AssemblyFileVersion("1.23.0.0")]
Vrh.Log4Pro.MaintenanceConsole/Tools.cs
@@ -330,14 +330,17 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS @@ -330,14 +330,17 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
330 resolvedtext = stringwithparameters; 330 resolvedtext = stringwithparameters;
331 foreach (var kvp in argumentparametersdictionary) 331 foreach (var kvp in argumentparametersdictionary)
332 { 332 {
333 - if (kvp.Value.StartsWith("?") && interactive) 333 + if (kvp.Value == null) { resolveddictionary.Add(kvp.Key, "");}
  334 + else if (kvp.Value.StartsWith("?") && interactive)
334 { 335 {
  336 + // "?default?prompt"
335 string prompt = $"Enter value for {kvp.Key}:"; 337 string prompt = $"Enter value for {kvp.Key}:";
336 string kvpdefaultvalue = null; 338 string kvpdefaultvalue = null;
337 if (kvp.Value.Length > 1) 339 if (kvp.Value.Length > 1)
338 { 340 {
339 - prompt = kvp.Value.Substring(1).Split(new char[] { '?' }, StringSplitOptions.RemoveEmptyEntries)[0];  
340 - if (kvp.Value.Substring(1).IndexOf('?') != -1) kvpdefaultvalue = kvp.Value.Substring(1).Split(new char[] { '?' }, StringSplitOptions.RemoveEmptyEntries)[1]; 341 + var ppp = kvp.Value.Substring(1).Split(new char[] { '?' }, StringSplitOptions.RemoveEmptyEntries);
  342 + if (!string.IsNullOrWhiteSpace(ppp[0])) { kvpdefaultvalue = ppp[0]; };
  343 + if (kvp.Value.Substring(1).IndexOf('?') != -1) { prompt = ppp[1]; }
341 } 344 }
342 string value = ColorConsole.ReadLine(prompt, ConsoleColor.Yellow, defaultvalue: kvpdefaultvalue); 345 string value = ColorConsole.ReadLine(prompt, ConsoleColor.Yellow, defaultvalue: kvpdefaultvalue);
343 if (value.ToUpper() == "EX") { return false; } 346 if (value.ToUpper() == "EX") { return false; }