Commit eca09089d58abbe11831e57b10ca4902934d3697

Authored by Schwirg László
1 parent fc8a064b

v1.27.1.0

Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs
@@ -747,24 +747,54 @@ GO @@ -747,24 +747,54 @@ GO
747 SQLDataBase sqld = p.Parameters as SQLDataBase; 747 SQLDataBase sqld = p.Parameters as SQLDataBase;
748 try 748 try
749 { 749 {
750 - ColorConsole.WriteLine(prefix: $"Enter the dbname, the userid/password (for the user in favour you want to drop the DB). Format:", bracket: "()", text: "[DBNAME][,USERNAME[,PASSWORD]]:", f: ConsoleColor.Yellow);  
751 - ColorConsole.WriteLine(prefix: " ", text: "[DBNAME]", bracket: "[]", suffix: $":name of the DB to delete, default:{sqld.DBName}", f: ConsoleColor.Yellow);  
752 - ColorConsole.WriteLine(prefix: " ", text: "[USERNAME,PASSWORD empty]", bracket: "[]", suffix: $":use windows authentication with current user", f: ConsoleColor.Yellow);  
753 - ColorConsole.WriteLine(prefix: " ", text: "USERNAME", bracket: "[]", suffix: $":use windows authentication with this user", f: ConsoleColor.Yellow);  
754 - ColorConsole.WriteLine(prefix: " ", text: "USERNAME,PASSWORD", bracket: "[]", suffix: $":use sql server authentication with this user and password.", f: ConsoleColor.Yellow); 750 + ColorConsole.WriteLine(prefix: $"Enter the userid/password (for the user in favour you want to drop the DB). Format:", bracket: "()", text: "[USERID[,PASSWORD]]:", f: ConsoleColor.Yellow);
  751 + ColorConsole.WriteLine(prefix: " ", text: "[USERID,PASSWORD empty]", bracket: "[]", suffix: $":use windows authentication with current user", f: ConsoleColor.Yellow);
  752 + ColorConsole.WriteLine(prefix: " ", text: "USERID", bracket: "[]", suffix: $":use windows authentication with this user", f: ConsoleColor.Yellow);
  753 + ColorConsole.WriteLine(prefix: " ", text: "USERID,PASSWORD", bracket: "[]", suffix: $":use sql server authentication with this user and password.", f: ConsoleColor.Yellow);
755 var parameters = ColorConsole.ReadLine($"EX=exit.", ConsoleColor.Yellow, suffix: " --> "); 754 var parameters = ColorConsole.ReadLine($"EX=exit.", ConsoleColor.Yellow, suffix: " --> ");
756 if (parameters.ToUpper() == "EX") { continue; } 755 if (parameters.ToUpper() == "EX") { continue; }
757 -  
758 string userid = null; 756 string userid = null;
759 string password = null; 757 string password = null;
  758 + if (!string.IsNullOrWhiteSpace(parameters))
  759 + {
  760 + var parlst = parameters.Split(new char[] { ',' });
  761 + userid = parlst[0];
  762 + if (parlst.Count() > 1) { password = parameters.Split(new char[] { ',' })[1]; }
  763 + }
  764 +
  765 + ColorConsole.WriteLine(prefix: $"Enter the regex mask for the name of the DBs to list. Format:", bracket: "()", text: "[REGEXMASK]:", f: ConsoleColor.Yellow);
  766 + ColorConsole.WriteLine(prefix: " ", text: "[REGEXMASK]", bracket: "[]", suffix: $":regex mask for the name of the DBs to list, default:.*", f: ConsoleColor.Yellow);
  767 + parameters = ColorConsole.ReadLine($"EX=exit.", ConsoleColor.Yellow, suffix: " --> ");
  768 + if (parameters.ToUpper() == "EX") { continue; }
  769 + string dbnamemask = null;
  770 + if (!string.IsNullOrWhiteSpace(parameters))
  771 + {
  772 + var parlst = parameters.Split(new char[] { ',' });
  773 + dbnamemask = parlst[0];
  774 + }
  775 + if (string.IsNullOrWhiteSpace(dbnamemask)) { dbnamemask = ""; }
  776 +
  777 + var dbdescriptordict = SQLDataBaseManagerCore.GetDatabases(sqld.SQLCS, dbnamemask, userid, password);
  778 + ColorConsole.WriteLine(text: "Available DBs", f: ConsoleColor.Yellow,suffix: $" (name masked with:'{dbnamemask}')");
  779 + foreach (var (dbdescriptor,ix) in dbdescriptordict.Select((text,ix)=> (text, ix)))
  780 + {
  781 + ColorConsole.WriteLine(prefix: $"#{ix}: ", bracket: "[]", text: dbdescriptor.Key, f: ConsoleColor.Yellow,suffix:dbdescriptor.Value);
  782 + }
  783 + ColorConsole.WriteLine();
  784 +
  785 + ColorConsole.WriteLine(prefix: $"Enter the name of the DB you want to drop. Format:", bracket: "()", text: "[DBNAME]:", f: ConsoleColor.Yellow);
  786 + ColorConsole.WriteLine(prefix: " ", text: "[DBNAME]", bracket: "[]", suffix: $":name of the DB to delete, default:{sqld.DBName}", f: ConsoleColor.Yellow);
  787 + parameters = ColorConsole.ReadLine($"EX=exit.", ConsoleColor.Yellow, suffix: " --> ");
  788 + if (parameters.ToUpper() == "EX") { continue; }
  789 +
760 string dbname = null; 790 string dbname = null;
761 if (!string.IsNullOrWhiteSpace(parameters)) 791 if (!string.IsNullOrWhiteSpace(parameters))
762 { 792 {
763 - dbname = parameters.Split(new char[] { ',' })[0];  
764 - if (parameters.IndexOf(',') >= 1) { userid = parameters.Split(new char[] { ',' })[1]; }  
765 - if (parameters.IndexOf(',') >= 0) { password = parameters.Split(new char[] { ',' })[2]; } 793 + var parlst = parameters.Split(new char[] { ',' });
  794 + dbname = parlst[0];
766 } 795 }
767 if (string.IsNullOrWhiteSpace(dbname)) { dbname = sqld.DBName; } 796 if (string.IsNullOrWhiteSpace(dbname)) { dbname = sqld.DBName; }
  797 +
768 ColorConsole.WriteLine($"Dropping DB..."); 798 ColorConsole.WriteLine($"Dropping DB...");
769 ColorConsole.WriteLine(prefix: " connection string to server:", text: sqld.SQLCS, bracket: "[]", f: ConsoleColor.Yellow); 799 ColorConsole.WriteLine(prefix: " connection string to server:", text: sqld.SQLCS, bracket: "[]", f: ConsoleColor.Yellow);
770 ColorConsole.WriteLine(prefix: " DB name to drop:", text: dbname, bracket: "[]", f: ConsoleColor.Yellow); 800 ColorConsole.WriteLine(prefix: " DB name to drop:", text: dbname, bracket: "[]", f: ConsoleColor.Yellow);
@@ -896,12 +926,12 @@ GO @@ -896,12 +926,12 @@ GO
896 ColorConsole.Write($"{st.Xml_Description}", ConsoleColor.Black, ConsoleColor.White); 926 ColorConsole.Write($"{st.Xml_Description}", ConsoleColor.Black, ConsoleColor.White);
897 var statuscolor = st.Status == SQLDataBaseManagerCore.SQLDBStatus.NoAccess ? ConsoleColor.Red:ConsoleColor.Green; 927 var statuscolor = st.Status == SQLDataBaseManagerCore.SQLDBStatus.NoAccess ? ConsoleColor.Red:ConsoleColor.Green;
898 ColorConsole.Write(st.Status.ToString(), statuscolor, bracket: "[]", prefix: " ", suffix: ". "); 928 ColorConsole.Write(st.Status.ToString(), statuscolor, bracket: "[]", prefix: " ", suffix: ". ");
  929 + ColorConsole.Write(st.DBName, statuscolor, bracket: "[]", prefix: "Database ", suffix: ". ");
  930 + ColorConsole.Write(st.DataSource, statuscolor, bracket: "[]", prefix: "from server ", suffix: ". ");
899 if (st.Status != SQLDataBaseManagerCore.SQLDBStatus.NoAccess) 931 if (st.Status != SQLDataBaseManagerCore.SQLDBStatus.NoAccess)
900 { 932 {
901 - ColorConsole.Write(st.DBName, statuscolor, bracket: "[]", prefix: "Database ", suffix: ". ");  
902 - ColorConsole.Write(st.DataSource, statuscolor, bracket: "[]", prefix: "from server ", suffix: ". ");  
903 - if (st.Xml_IsRemoteDB) { ColorConsole.Write("REMOTE", ConsoleColor.Cyan, bracket: "[]", prefix: "", suffix: ""); }  
904 } 933 }
  934 + if (st.Xml_IsRemoteDB) { ColorConsole.Write("REMOTE", ConsoleColor.Cyan, bracket: "[]", prefix: "", suffix: ""); }
905 ColorConsole.WriteLine(); 935 ColorConsole.WriteLine();
906 return " "; 936 return " ";
907 } 937 }
@@ -1381,12 +1411,41 @@ GO @@ -1381,12 +1411,41 @@ GO
1381 if (sqlserver.Databases.Contains(databasename)) 1411 if (sqlserver.Databases.Contains(databasename))
1382 { 1412 {
1383 GetExclusiveUse(databasename, sqlserver, sc); 1413 GetExclusiveUse(databasename, sqlserver, sc);
1384 - sqlserver.Databases[databasename].Drop(); 1414 + var db = (sqlserver.Databases[databasename]);
  1415 + db.Drop();
1385 return true; 1416 return true;
1386 } 1417 }
1387 else { throw new ApplicationException($"Specified DB '{databasename}' does not exist!"); } 1418 else { throw new ApplicationException($"Specified DB '{databasename}' does not exist!"); }
1388 } 1419 }
1389 - catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); return false; } 1420 + catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(nameof(DropDatabase)), ConsoleColor.Red); return false; }
  1421 + finally { sqlserver?.ConnectionContext.SqlConnectionObject.Dispose(); }
  1422 + }
  1423 + public static Dictionary<string, string> GetDatabases(string cs, string databasenamemask, string userid, string password)
  1424 + {
  1425 + Server sqlserver = null;
  1426 + Dictionary<string, string> ReturnDict = new Dictionary<string, string>();
  1427 + try
  1428 + {
  1429 + var sc = GetSqlConnection(cs, dbname: null, userid: userid, userpassword: password);
  1430 + sqlserver = SQLServerConnect(sc); if (sqlserver == null) return null;
  1431 +
  1432 + foreach (Database db in sqlserver.Databases)
  1433 + {
  1434 + if (!Regex.Match(db.Name, databasenamemask).Success) continue;
  1435 + string dbname=""; try { dbname = db.Name; } catch { };
  1436 + if (string.IsNullOrWhiteSpace(dbname) || dbname=="?") continue;
  1437 + var dbver = ""; try { dbver = $"v{db.Version};"; } catch { };
  1438 + var dbowner = ""; try { dbowner = $"owner:{db.Owner};"; } catch { };
  1439 + var dbsize = ""; try { dbsize = $"size:{db.Size}MB;"; } catch { };
  1440 + var dbfree = ""; try { dbfree = $"free:{db.SpaceAvailable}MB;"; } catch { };
  1441 + var dbstate = ""; try { dbstate = $"state:{db.State};"; } catch { };
  1442 + var dbstatus = ""; try { dbstatus = $"status:{db.Status};"; } catch { };
  1443 + var dbstr = $"{dbver}{dbowner}{dbsize}{dbfree}{dbstate}{dbstatus}";
  1444 + ReturnDict.Add(dbname,dbstr);
  1445 + }
  1446 + return ReturnDict;
  1447 + }
  1448 + catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(nameof(GetDatabases)), ConsoleColor.Red); return null; }
1390 finally { sqlserver?.ConnectionContext.SqlConnectionObject.Dispose(); } 1449 finally { sqlserver?.ConnectionContext.SqlConnectionObject.Dispose(); }
1391 } 1450 }
1392 public static void GetExclusiveUse(string databasename,Server sqlserver,SqlConnection sc) 1451 public static void GetExclusiveUse(string databasename,Server sqlserver,SqlConnection sc)
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.27.0.0")]  
36 -[assembly: AssemblyFileVersion("1.27.0.0")] 35 +[assembly: AssemblyVersion("1.27.1.0")]
  36 +[assembly: AssemblyFileVersion("1.27.1.0")]
Vrh.Log4Pro.MaintenanceConsole/Tools.cs
@@ -502,23 +502,24 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS @@ -502,23 +502,24 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS
502 /// Az exception és belső exceptionjeinek összefűzése 502 /// Az exception és belső exceptionjeinek összefűzése
503 /// </summary> 503 /// </summary>
504 /// <param name="ex"></param> 504 /// <param name="ex"></param>
  505 + /// <param name="header"></param>
505 /// <returns></returns> 506 /// <returns></returns>
506 - public static string MessageNested(this Exception ex) 507 + public static string MessageNested(this Exception ex, string header=null)
507 { 508 {
508 - string rexmsg = ""; 509 + string rexmsg = (!string.IsNullOrWhiteSpace(header)?(header+">>>: "):"")+ "";
509 string indent = ""; 510 string indent = "";
510 const string indentof1level = " "; 511 const string indentof1level = " ";
511 Exception excl = ex; 512 Exception excl = ex;
512 while (excl != null) 513 while (excl != null)
513 { 514 {
514 - if (!string.IsNullOrWhiteSpace(ex.Message))  
515 - { 515 + if (!string.IsNullOrWhiteSpace(ex.Message))
  516 + {
516 rexmsg += indent + excl.Message; 517 rexmsg += indent + excl.Message;
517 indent += (indent == "" ? "\n" : "") + indentof1level; 518 indent += (indent == "" ? "\n" : "") + indentof1level;
518 } 519 }
519 excl = excl.InnerException; 520 excl = excl.InnerException;
520 } 521 }
521 - return rexmsg.Replace("\n\n","\n"); 522 + return rexmsg.Replace("\n\n", "\n");
522 } 523 }
523 } 524 }
524 525