From 31cca8095fdfee6fcccba81b77f75a74fc5b7d3e Mon Sep 17 00:00:00 2001 From: Schwirg László Date: Fri, 20 Dec 2024 13:02:40 +0100 Subject: [PATCH] v1.31.8.0 - Move DB to remote server letisztázása --- Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------- Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs | 4 ++-- 2 files changed, 150 insertions(+), 136 deletions(-) diff --git a/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs b/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs index bf126aa..76a37ef 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs @@ -32,6 +32,7 @@ using System.Security.Cryptography; using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder; using System.Windows.Controls; using Menu = Vrh.Log4Pro.MaintenanceConsole.MenuNS.Menu; +using static Vrh.Log4Pro.MaintenanceConsole.MenuNS.Menu; namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS { @@ -69,25 +70,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS menufunctions.ExecuteMenu(functionkey); return o2; } - public static void Execute(string key, bool enabledbbackup, bool enablescriptbackup, bool enabletabledatabackup, string targetfolder=null,DateTime? timestamp = null) - { - var packagets = (timestamp.HasValue ? timestamp.Value : DateTime.Now).ToString("yyyyMMddHHmmss"); - var config = new SQLDataBaseManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); - var origsqld = config.GetDefinitionList().FirstOrDefault(x => x.Xml_Key == key); - if (origsqld != null) - { - var sqld = new SQLDataBase(origsqld); - var dbname = SQLDataBaseManagerCore.GetDBName(sqld.SQLCS); - ColorConsole.WriteLine($"Database backup process started. DB key:'{key}', name:'{dbname}'...", ConsoleColor.Yellow); - if (!string.IsNullOrWhiteSpace(targetfolder)) { sqld.Xml_BackupTargetDirectoryPath = targetfolder; } - if (enabledbbackup) { SQLDataBaseManagerCore.CreateBackup(sqld,null, timestamp); } - if (enablescriptbackup) { SQLDataBaseManagerCore.BackupSqlScripts(sqld, timestamp); } - if (enabletabledatabackup) { SQLDataBaseManagerCore.BackupSqlData(sqld, timestamp); } - ColorConsole.WriteLine($"Database backup process finished!", ConsoleColor.DarkGreen); - } - else { ColorConsole.WriteLine($"Database backup process error. DB key incorrect:'{key}'...", ConsoleColor.Red); } - } - #endregion Execute + #endregion Execute #region First level Executors with UI private static object CreateDataScripts(object parameter, object o) @@ -180,12 +163,6 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS } return o; } - private static bool NoDBNameSpecified(SQLDataBase ssqldb) - { - const string FUNNOTAVAILTXT = "Function is not available for server connection strings wit no DB name specified!"; - if (string.IsNullOrWhiteSpace(SQLDataBaseManagerCore.GetDBName(ssqldb.SQLCS))) { ColorConsole.WriteLine(FUNNOTAVAILTXT, ConsoleColor.Red); ssqldb.DBName = "master"; return true; } - return false; - } private static object RestoreDataBase(object parameter, object o) { var config = (parameter as Menu.ExecutorParameter).GetConfig(); @@ -482,9 +459,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS #region CreateDBUser private static string[] selectablerolelist = new string[] { "FULLACCESS", "DATAREADER", "db_accessadmin", "db_backupoperator", "db_datareader", "db_datawriter", "db_ddladmin", "db_denydatareader", "db_denydatawriter", "db_owner", "db_securityadmin", }; - private static string[] fullaccessrolelist = new string[] { "db_accessadmin", "db_backupoperator", "db_datareader", "db_datawriter", "db_ddladmin", "db_owner", "db_securityadmin", }; + private static string[] fullaccessdbloginrolelist = new string[] { "db_accessadmin", "db_backupoperator", "db_datareader", "db_datawriter", "db_ddladmin", "db_owner", "db_securityadmin", }; private static string[] datareaderrolelist = new string[] { "db_datareader", }; - private static string[] loginrolelist = new string[] { "dbcreator", "securityadmin", }; + private static string[] serverloginrolelist = new string[] { "dbcreator", "securityadmin", }; private const string COMMA = ","; private static object CreateDBUser(object parameter, object o) { @@ -602,7 +579,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS if (selectedrolelistnum > 1 && specialselectionactive) { ColorConsole.WriteLine($"ERROR! FULLACCESS or DATAREADER has to be selected alone!", ConsoleColor.Red); return null; } if (badrolenames.Count > 0) { ColorConsole.WriteLine($"ERROR! {string.Join(COMMA, badrolenames)} are not available!", ConsoleColor.Red); return null; } var effectiverolelist = - enablefullaccess ? fullaccessrolelist + enablefullaccess ? fullaccessdbloginrolelist : enabledatareader ? datareaderrolelist : selectedrolelist; return string.Join(",", effectiverolelist); @@ -649,116 +626,128 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS var selectedsqldbindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.SQLDataBaseManager.Function.CMD_DATABASES); - (bool Exit, bool Yes) yesornoanswer; - (bool Exit, bool Yes, SQLDataBase Dbfrom, SQLDataBase Dbto, string Selecteddbname, bool Emulation) movedbanswer; - while (true) - { + while (true) + { var DateTimeNow = DateTime.Now; + SQLDataBase dbfrom = null; + SQLDataBase dbto = null; - movedbanswer = YesOrNo_MoveDbToRemoteServer(config, selectedsqldbindexes); - if (NoDBNameSpecified(movedbanswer.Dbfrom)) { continue; } - if (NoDBNameSpecified(movedbanswer.Dbto)) { continue; } - if (movedbanswer.Exit) break; - if (movedbanswer.Yes) + movedatabaseloop: + (Menu.SelectionResult selectionresult, bool yes) yesornoanswer = YesOrNo(new List() { $"Do You want to move ANY database from local server to remote server?" }); + if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o; + if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes) { - var movesuccess = SQLDataBaseManagerCore.MoveDbToRemoteServer(movedbanswer.Dbfrom, movedbanswer.Dbto, movedbanswer.Selecteddbname, movedbanswer.Emulation); - if (!movesuccess) continue; - } - - var usernamelist = new string[] { "corplear\\lschwirg", "corplear\\gen_vrhalmadmin", $"corplear\\{Program.ThisComputer.ComputerName}$" }; + var dbselection = SelectToDbAndFromDb(config, selectedsqldbindexes, $"Select the SQL database(s) to move the first to the second.!"); + if (dbselection.selection == Menu.SelectionResult.Exit) { return o; } + if (dbselection.selection != Menu.SelectionResult.Ok) { goto movedatabaseloop; } + dbfrom = dbselection.dbfrom; + dbto = dbselection.dbto; + if (NoDBNameSpecified(dbfrom) || NoDBNameSpecified(dbto)) { continue; } + + var todbname = ColorConsole.ReadLine($"Enter the name of the target DB. EMPTY={dbto.DBName}, EX=exit."); + if (todbname.ToUpper() == "EX") { return o; } + else if (string.IsNullOrWhiteSpace(todbname)) todbname = dbto.DBName; + + confirmloop:; + var confirmtext = ColorConsole.ReadLine("Enter CONFIRM to start, EX to exit, SKIP to skip."); + if (confirmtext.ToUpper() == "EX") { return o; } + else if (confirmtext.ToUpper() == "CONFIRM") + { + var movesuccess = SQLDataBaseManagerCore.MoveDbToRemoteServer(dbfrom, dbto, todbname, false); + if (!movesuccess) continue; + } + else if (confirmtext.ToUpper() != "SKIP") { goto confirmloop; }; + } - yesornoanswer = YesOrNo_ServerLogin(movedbanswer.Dbfrom.SQLCS, usernamelist); - if (yesornoanswer.Exit) return o; - if (yesornoanswer.Yes) SQLDataBaseManagerCore.CreateServerLogins(movedbanswer.Emulation, movedbanswer.Dbfrom.SQLCS, usernamelist, loginrolelist,fullaccessrolelist); + serverloginloop: + yesornoanswer = YesOrNo(new List() { $"Do You want to create server and DB logins for local and/or remote server/database?", }); + if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o; + if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes) + { + if (dbfrom == null || dbto == null) + { + var dbselection = SelectToDbAndFromDb(config, selectedsqldbindexes, $"Select the SQL database(s) to add server and DB logins!"); + if (dbselection.selection == Menu.SelectionResult.Exit) { return o; } + if (dbselection.selection != Menu.SelectionResult.Ok) { goto serverloginloop; } + dbfrom = dbselection.dbfrom; + dbto = dbselection.dbto; + } + var usernamelist = new string[] { "corplear\\lschwirg", "corplear\\gen_vrhalmadmin", $"corplear\\{Program.ThisComputer.ComputerName}$" }; + + string l1 = $"Do You want to create the following mandatory server and DB logins for SOURCE server and DB?"; + string l2 = $" SQL connection string: {dbfrom.SQLCS}"; + string l3 = $" Username list: " + string.Join(",", usernamelist); + yesornoanswer = YesOrNo(new List() { l1, l2, l3, }); + if (yesornoanswer.selectionresult== Menu.SelectionResult.Exit) return o; + if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes) + { + SQLDataBaseManagerCore.CreateServerAndDBLogins(false, dbfrom.SQLCS, usernamelist, serverloginrolelist, fullaccessdbloginrolelist); + } - yesornoanswer = YesOrNo_ServerLogin(movedbanswer.Dbto.SQLCS, usernamelist); - if (yesornoanswer.Exit) return o; - if (yesornoanswer.Yes) SQLDataBaseManagerCore.CreateServerLogins(movedbanswer.Emulation, movedbanswer.Dbto.SQLCS, usernamelist, loginrolelist, fullaccessrolelist); + string l13 = $"Do You want to create the following mandatory server and DB logins for TARGET server and DB?"; + string l23 = $" SQL connection string: {dbto.SQLCS}"; + string l33 = $" Username list: " + string.Join(",", usernamelist); + yesornoanswer = YesOrNo(new List() { l13,l23,l33,}); + if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o; + if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes) + { + SQLDataBaseManagerCore.CreateServerAndDBLogins(false, dbto.SQLCS, usernamelist, serverloginrolelist, fullaccessdbloginrolelist); + } + } - yesornoanswer = YesOrNo_SetDbOffline(movedbanswer.Dbfrom.SQLCS, null); - if (yesornoanswer.Exit) return o; - if (yesornoanswer.Yes) SQLDataBaseManagerCore.SetDatabaseOffline(movedbanswer.Dbfrom.SQLCS); + yesornoanswer = YesOrNo(new List() { $"Do You want to set database '{SQLDataBaseManagerCore.GetDBName(dbfrom.SQLCS)}' OFFLINE on server '{SQLDataBaseManagerCore.GetDataSource(dbfrom.SQLCS)}'?", }); + if (yesornoanswer.selectionresult == Menu.SelectionResult.Exit) return o; + if (yesornoanswer.selectionresult == Menu.SelectionResult.Ok && yesornoanswer.yes) + { + SQLDataBaseManagerCore.SetDatabaseOffline(dbfrom.SQLCS); + } - ColorConsole.WriteLine($"Moving DB to remote server completed. Required time: {(int)(DateTime.Now.Subtract(DateTimeNow).TotalSeconds)} seconds.", ConsoleColor.Green); + ColorConsole.WriteLine($"Process completed. Required time: {(int)(DateTime.Now.Subtract(DateTimeNow).TotalSeconds)} seconds.", ConsoleColor.Green); } - return o; } - private static (bool,bool,SQLDataBase, SQLDataBase, string, bool) YesOrNo_MoveDbToRemoteServer(SQLDataBaseManagerXmlProcessor config,string selectedsqldbindexes) + private static (Menu.SelectionResult selection,SQLDataBase dbfrom,SQLDataBase dbto) SelectToDbAndFromDb(SQLDataBaseManagerXmlProcessor config, string selectedsqldbindexes, string databaseselectionheadertext) + { + var menufolders = DisplaySQLDataBaseMenu(config, $"{databaseselectionheadertext} Format:FROMLOCALDB,TOREMOTEDB", silent: true, selectionmode: Menu.SelectionMode.Multi); + Menu.Selection sr = menufolders.Select(selectedsqldbindexes); + if (sr.Result == Menu.SelectionResult.Exit) { return (Menu.SelectionResult.Exit, null,null); } + else if (sr.Result == Menu.SelectionResult.None) { return (Menu.SelectionResult.None, null,null); } + else if (sr.Result == Menu.SelectionResult.Error) { return (Menu.SelectionResult.Error, null, null); } + else if (sr.Result == Menu.SelectionResult.Ok && sr.SelectedParameterList.FirstOrDefault() == null) { return (Menu.SelectionResult.Error, null, null); } + else if (sr.Result == Menu.SelectionResult.Ok && sr.SelectedParameterList.Count() != 2) + { + ColorConsole.WriteLine($"Select exactly 2 DB. Format:FROMLOCALDB,TOREMOTEDB", ConsoleColor.Red); + return (Menu.SelectionResult.Error, null, null); + } + else if (sr.Result == Menu.SelectionResult.Ok) { } + else { } + var spfrom = sr.SelectedParameterList.First(); + var spto = sr.SelectedParameterList.ElementAt(1); + SQLDataBase dbfrom = spfrom.Parameters as SQLDataBase; + SQLDataBase dbto = spto.Parameters as SQLDataBase; + if (!dbto.Xml_IsRemoteDB) + { + ColorConsole.WriteLine($"TOREMOTEDB '{dbto.SQLCS}' has to be remote!", ConsoleColor.Red); + return (Menu.SelectionResult.Error, null, null); + } + if (dbfrom.Xml_IsRemoteDB) + { + ColorConsole.WriteLine($"FROMLOCALDB '{dbfrom.SQLCS}' has to be local!", ConsoleColor.Red); + return (Menu.SelectionResult.Error, null, null); + } + return (Menu.SelectionResult.Ok, dbfrom,dbto); + } + private static (Menu.SelectionResult selectionresult, bool yes) YesOrNo(List questiontextLines) { - (bool, bool, SQLDataBase, SQLDataBase, string, bool) returnvalueexit = (true, false, null, null, null, false); - - selectionloop: - - ColorConsole.WriteLine($"Do You want to move ANY database from local server to remote server?", ConsoleColor.Yellow); - var yesorno = ColorConsole.ReadLine("Move?", ConsoleColor.Yellow, validitylist: new List { "yes", "no" }, defaultvalue: "yes"); - if (yesorno.ToUpper() == "EX") return returnvalueexit; - - var menufolders = DisplaySQLDataBaseMenu(config, $"Select the SQL database(s) to manage with function. '{nameof(MoveDbToRemoteServer)}'! Format:FROMLOCALDB,TOREMOTEDB", silent: true, selectionmode: Menu.SelectionMode.Multi); - - Menu.Selection sr = menufolders.Select(selectedsqldbindexes); - if (sr.Result == Menu.SelectionResult.Exit) { return returnvalueexit; } - else if (sr.Result == Menu.SelectionResult.None) { goto selectionloop; } - else if (sr.Result == Menu.SelectionResult.Error) { goto selectionloop; } - else if (sr.Result == Menu.SelectionResult.Ok && sr.SelectedParameterList.FirstOrDefault() == null) { goto selectionloop; } - else if (sr.Result == Menu.SelectionResult.Ok && sr.SelectedParameterList.Count() != 2) - { - ColorConsole.WriteLine($"Select exactly 2 DB. Format:FROMLOCALDB,TOREMOTEDB", ConsoleColor.Red); - goto selectionloop; - } - else if (sr.Result == Menu.SelectionResult.Ok) { } - else { } - var spfrom = sr.SelectedParameterList.First(); - var spto = sr.SelectedParameterList.ElementAt(1); - SQLDataBase dbfrom = spfrom.Parameters as SQLDataBase; - SQLDataBase dbto = spto.Parameters as SQLDataBase; - if (!dbto.Xml_IsRemoteDB) - { - ColorConsole.WriteLine($"TOREMOTEDB '{dbto.SQLCS}' has to be remote!", ConsoleColor.Red); - goto selectionloop; - } - if (dbfrom.Xml_IsRemoteDB) - { - ColorConsole.WriteLine($"FROMLOCALDB '{dbfrom.SQLCS}' has to be local!", ConsoleColor.Red); - goto selectionloop; - } - if (yesorno.ToUpper() != "YES") return (false, false,dbfrom,dbto, null,false); - - bool emulation = false; - var selecteddbname = ColorConsole.ReadLine($"Enter the name of the restored DB. EMPTY={dbto.DBName}, EX=exit."); - if (selecteddbname.ToUpper() == "EX") return returnvalueexit; - else if (string.IsNullOrWhiteSpace(selecteddbname)) selecteddbname = dbto.DBName; + if (questiontextLines!=null) foreach(string l in questiontextLines) { ColorConsole.WriteLine(l, ConsoleColor.Yellow); } + var yesorno = ColorConsole.ReadLine("Do action?", ConsoleColor.Yellow, validitylist: new List { "yes", "no" }, defaultvalue: "yes"); + if (yesorno.ToUpper() == "EX") return (Menu.SelectionResult.Exit, false); + else if (yesorno.ToUpper() == "yes") return (Menu.SelectionResult.Ok, true); + else return (Menu.SelectionResult.Ok, false); + } + #endregion MoveDbToRemoteServer - confirmloop:; - var selection = ColorConsole.ReadLine("Enter CONFIRM to start, EMU to emulate, EX to exit."); - if (selection.ToUpper() == "EX") return returnvalueexit; - else if (selection.ToUpper() == "EMU") emulation = true; - else if (selection.ToUpper() == "CONFIRM") { } - else goto confirmloop; - return (false,true,dbfrom,dbto, selecteddbname,emulation); - } - private static (bool,bool) YesOrNo_SetDbOffline(string sqlcs, string dbname) - { - dbname = dbname ?? SQLDataBaseManagerCore.GetDBName(sqlcs); - var servername = SQLDataBaseManagerCore.GetDataSource(sqlcs); - ColorConsole.WriteLine($"Do You want to set database '{dbname}' OFFLINE on server '{servername}'?", ConsoleColor.Yellow); - ColorConsole.WriteLine($" SQL connection string: {sqlcs}", ConsoleColor.Yellow); - ColorConsole.WriteLine($" Server/database: {servername}/{dbname}", ConsoleColor.Yellow); - var yesorno = ColorConsole.ReadLine("Set offline?", ConsoleColor.Yellow, validitylist: new List { "yes", "no" }, defaultvalue: "yes"); - return (yesorno.ToUpper() == "EX", yesorno.ToUpper() == "YES"); - } - private static (bool,bool) YesOrNo_ServerLogin(string sqlcs,string[] usernamelist) - { - ColorConsole.WriteLine($"Do You want to create the following mandatory server logins?", ConsoleColor.Yellow); - ColorConsole.WriteLine($" SQL connection string: {sqlcs}", ConsoleColor.Yellow); - ColorConsole.WriteLine($" Server: {SQLDataBaseManagerCore.GetDataSource(sqlcs)}", ConsoleColor.Yellow); - ColorConsole.WriteLine($" Username list: " + string.Join(",", usernamelist), ConsoleColor.Yellow); - var yesorno = ColorConsole.ReadLine("Create login?", ConsoleColor.Yellow, validitylist: new List { "yes", "no" }, defaultvalue: "yes"); - return (yesorno.ToUpper() == "EX", yesorno.ToUpper() == "YES"); - } - #endregion MoveDbToRemoteServer - - #region ManageLastUpdatedTrigger - private static object ManageLastUpdatedTrigger(object parameter, object o) { return _ManageLastUpdatedTrigger(parameter, o, null); } + #region ManageLastUpdatedTrigger + private static object ManageLastUpdatedTrigger(object parameter, object o) { return _ManageLastUpdatedTrigger(parameter, o, null); } #region script texts for _RemoveAndCreateLastUpdatedTrigger const string Header_Script = @"USE [{DBNAME}] @@ -977,6 +966,7 @@ GO } #endregion ManageLastUpdatedTrigger + #region ExecuteScript private static object ExecuteScript(object parameter, object o) { var config = (parameter as Menu.ExecutorParameter).GetConfig(); @@ -1079,7 +1069,7 @@ GO } return returnkey != null; } - + #endregion ExecuteScript private static object DropDB(object parameter, object o) { var config = (parameter as Menu.ExecutorParameter).GetConfig(); @@ -1255,6 +1245,30 @@ GO #endregion First level Executors with UI #region private methods + private static bool NoDBNameSpecified(SQLDataBase ssqldb) + { + const string FUNNOTAVAILTXT = "Function is not available for server connection strings wit no DB name specified!"; + if (string.IsNullOrWhiteSpace(SQLDataBaseManagerCore.GetDBName(ssqldb.SQLCS))) { ColorConsole.WriteLine(FUNNOTAVAILTXT, ConsoleColor.Red); ssqldb.DBName = "master"; return true; } + return false; + } + public static void Execute(string key, bool enabledbbackup, bool enablescriptbackup, bool enabletabledatabackup, string targetfolder=null,DateTime? timestamp = null) + { + var packagets = (timestamp.HasValue ? timestamp.Value : DateTime.Now).ToString("yyyyMMddHHmmss"); + var config = new SQLDataBaseManagerXmlProcessor(XMLCONNECTIONSTRING, "", "hu-HU"); + var origsqld = config.GetDefinitionList().FirstOrDefault(x => x.Xml_Key == key); + if (origsqld != null) + { + var sqld = new SQLDataBase(origsqld); + var dbname = SQLDataBaseManagerCore.GetDBName(sqld.SQLCS); + ColorConsole.WriteLine($"Database backup process started. DB key:'{key}', name:'{dbname}'...", ConsoleColor.Yellow); + if (!string.IsNullOrWhiteSpace(targetfolder)) { sqld.Xml_BackupTargetDirectoryPath = targetfolder; } + if (enabledbbackup) { SQLDataBaseManagerCore.CreateBackup(sqld,null, timestamp); } + if (enablescriptbackup) { SQLDataBaseManagerCore.BackupSqlScripts(sqld, timestamp); } + if (enabletabledatabackup) { SQLDataBaseManagerCore.BackupSqlData(sqld, timestamp); } + ColorConsole.WriteLine($"Database backup process finished!", ConsoleColor.DarkGreen); + } + else { ColorConsole.WriteLine($"Database backup process error. DB key incorrect:'{key}'...", ConsoleColor.Red); } + } #region private DisplaySQLDataBaseMenu private static void DataBaseListDisplayer() { DisplaySQLDataBaseMenu(); } private static Menu DisplaySQLDataBaseMenu(SQLDataBaseManagerXmlProcessor config = null, string prompt = null, bool silent = false, Menu.SelectionMode selectionmode = Menu.SelectionMode.Multi) @@ -1778,14 +1792,14 @@ GO } finally { sqlserver?.ConnectionContext.SqlConnectionObject.Dispose(); } } - public static void CreateServerLogins(bool emulation, string sqlcs, string[] usernamelist,string[] loginrolelist, string[] fullaccessrolelist) + public static void CreateServerAndDBLogins(bool emulation, string sqlcs, string[] usernamelist,string[] serverloginrolelist, string[] dbloginrolelist) { foreach (var username in usernamelist) { - ColorConsole.WriteLine(username, ConsoleColor.Yellow, prefix: nameof(SQLDataBaseManagerCore.CreateUser) + ":"); - try { if (!emulation) SQLDataBaseManagerCore.CreateLogin(sqlcs, username, null, "master", LoginType.WindowsUser, loginrolelist); } + ColorConsole.WriteLine(username, ConsoleColor.Yellow, prefix: nameof(SQLDataBaseManagerCore.CreateServerAndDBLogins) + ":"); + try { if (!emulation) SQLDataBaseManagerCore.CreateLogin(sqlcs, username, null, "master", LoginType.WindowsUser, serverloginrolelist); } catch (Exception ex) { ColorConsole.WriteLine(nameof(SQLDataBaseManagerCore.CreateLogin) + ">>>: " + ex.MessageNested(), ConsoleColor.Red); } - try { if (!emulation) SQLDataBaseManagerCore.CreateUser(sqlcs, username, string.Join(",", fullaccessrolelist), "w"); } + try { if (!emulation) SQLDataBaseManagerCore.CreateUser(sqlcs, username, string.Join(",", dbloginrolelist), "w"); } catch (Exception ex) { ColorConsole.WriteLine(nameof(SQLDataBaseManagerCore.CreateUser) + "\n" + ex.MessageNested(), ConsoleColor.Red); } } } @@ -2060,7 +2074,7 @@ GO sqltxt = Tools.KvpString.Substitute($"{RUNNINGMODE}={RUNNINGMODE_ONERUN};{RUNNINGMODE_ONERUN_PARAMETER_DELETEBEFOREDATE}={limitdatefornextrun:s};", sqltxtalmostresolved); if (sqltxt == null) { return Finalize(1, Add(multirunresult, ERRMSG_NOTHINGTOEXECUTE)); } //won't really get, but we never know... ret1 = ExecuteSQLScript(sqlc, sqltxt, sqlscript.CommandTimeout, null); - Add(loople, $"LIMITDATE", limitdatefornextrun.ToString()); + Add(loople, $"LIMITDATE", limitdatefornextrun.ToString("yyyy-MM-ddTHH:mm:ss.fff")); Add(loople, $"RETCODE", ret1.ReturnValue.ToString()); Add(loople, $"RETMSG", ret1.ReturnMessage); Add(loople, $"PROCESSINGTIME", DateTime.Now.Subtract(loopstart).ToString()); @@ -2098,7 +2112,7 @@ GO Add(multirunresult, $"NUMOFRUNS", deleteruncounter.ToString()); Add(multirunresult, $"DBRECORDS", $"{numoftotaldbrecords_before}-->{numoftotaldbrecords_after} (total:{numoftotaldbrecords_after-numoftotaldbrecords_before})"); - Add(multirunresult, $"MINDATE", $"{mindateTS_before}-->{mindateTS_after}"); + Add(multirunresult, $"MINDATE", $"{mindateTS_before.ToString("yyyy-MM-ddTHH:mm:ss.fff")}-->{mindateTS_after.ToString("yyyy-MM-ddTHH:mm:ss.fff")}"); Add(multirunresult, $"PROCESSINGTIME", $"{DateTime.Now.Subtract(starttime)}"); return Finalize(0, multirunresult); } diff --git a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs index da088d4..1bad1e6 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.31.7.0")] -[assembly: AssemblyFileVersion("1.31.7.0")] +[assembly: AssemblyVersion("1.31.8.0")] +[assembly: AssemblyFileVersion("1.31.8.0")] -- libgit2 0.21.2