Commit acc7abdacdda58ceab3b0d3b82a919e32de4fff0
1 parent
84e2de26
v1.2.3.0
- SQL Table backup script esetén a hibakezelés javítása
Showing
4 changed files
with
91 additions
and
40 deletions
Show diff stats
Vrh.Log4Pro.MaintenanceConsole/ConsoleFunction - Tools.cs
@@ -233,4 +233,44 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | @@ -233,4 +233,44 @@ namespace Vrh.Log4Pro.MaintenanceConsole.ToolsNS | ||
233 | return ""; | 233 | return ""; |
234 | } | 234 | } |
235 | } | 235 | } |
236 | + | ||
237 | + #region StringExtension class | ||
238 | + public static class StringExtension | ||
239 | + { | ||
240 | + /// <summary> | ||
241 | + /// Behelyezzesíti a megadott stringben előforduló Environment.SpecialFolder enum neveket | ||
242 | + /// az Environment.GetFolderPath által visszadott tényleges értékükre | ||
243 | + /// </summary> | ||
244 | + /// <param name="s"></param> | ||
245 | + /// <param name="n"></param> | ||
246 | + /// <returns></returns> | ||
247 | + public static string SubstituteSpecialFolderName(this string s, Environment.SpecialFolder n) { return s.Replace("@" + n.ToString() + "@", Environment.GetFolderPath(n)); } | ||
248 | + } | ||
249 | + #endregion StringExtension class | ||
250 | + | ||
251 | + #region ExceptionExtension class | ||
252 | + public static class ExceptionExtension | ||
253 | + { | ||
254 | + /// <summary> | ||
255 | + /// Az exception és belső exceptionjeinek összefűzése | ||
256 | + /// </summary> | ||
257 | + /// <param name="ex"></param> | ||
258 | + /// <returns></returns> | ||
259 | + public static string MessageNested(this Exception ex) | ||
260 | + { | ||
261 | + string rexmsg = ""; | ||
262 | + string indent = ""; | ||
263 | + const string indentof1level = " "; | ||
264 | + Exception excl = ex; | ||
265 | + while (true) | ||
266 | + { | ||
267 | + rexmsg += indent + excl.Message; | ||
268 | + excl = excl.InnerException; | ||
269 | + indent += (indent==""?"\n":"")+indentof1level; | ||
270 | + if (excl == null) { break; } | ||
271 | + } | ||
272 | + return rexmsg.Replace("\n\n","\n"); | ||
273 | + } | ||
274 | + } | ||
275 | + #endregion ExceptionExtension class | ||
236 | } | 276 | } |
Vrh.Log4Pro.MaintenanceConsole/Manager - BackupPackageManager.cs
@@ -103,7 +103,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.BackupPackageManagerNS | @@ -103,7 +103,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.BackupPackageManagerNS | ||
103 | BackupPackageManagerCore.CreatePackageFile(bp, tempfolderpath, vars); | 103 | BackupPackageManagerCore.CreatePackageFile(bp, tempfolderpath, vars); |
104 | if (Directory.Exists(tempfolderpath)) { Directory.Delete(tempfolderpath,true); } | 104 | if (Directory.Exists(tempfolderpath)) { Directory.Delete(tempfolderpath,true); } |
105 | } | 105 | } |
106 | - catch (Exception ex) { ColorConsole.WriteLine(ex.Message, ConsoleColor.Red); } | 106 | + catch (Exception ex) { ColorConsole.WriteLine(ex.MessageNested(), ConsoleColor.Red); } |
107 | } | 107 | } |
108 | #endregion First level Executors with UI | 108 | #endregion First level Executors with UI |
109 | 109 | ||
@@ -486,28 +486,28 @@ namespace Vrh.Log4Pro.MaintenanceConsole.BackupPackageManagerNS | @@ -486,28 +486,28 @@ namespace Vrh.Log4Pro.MaintenanceConsole.BackupPackageManagerNS | ||
486 | private string SpecialFolderNameSubstitution(string path) | 486 | private string SpecialFolderNameSubstitution(string path) |
487 | { | 487 | { |
488 | return path | 488 | return path |
489 | - .R(Environment.SpecialFolder.ApplicationData)// Current User's Application Data | ||
490 | - .R(Environment.SpecialFolder.CommonApplicationData) // All User's Application Data | ||
491 | - .R(Environment.SpecialFolder.CommonProgramFiles) // Program Files | ||
492 | - .R(Environment.SpecialFolder.Cookies) // Internet Cookie | ||
493 | - .R(Environment.SpecialFolder.Desktop) // Logical Desktop | ||
494 | - .R(Environment.SpecialFolder.DesktopDirectory) // Physical Desktop | ||
495 | - .R(Environment.SpecialFolder.Favorites) // Favorites | ||
496 | - .R(Environment.SpecialFolder.History) // Internet History | ||
497 | - .R(Environment.SpecialFolder.InternetCache) // Internet Cache | ||
498 | - .R(Environment.SpecialFolder.MyComputer) // "My Computer" Folder | ||
499 | - .R(Environment.SpecialFolder.MyDocuments) // "My Documents" Folder | ||
500 | - .R(Environment.SpecialFolder.MyMusic) // "My Music" Folder | ||
501 | - .R(Environment.SpecialFolder.MyPictures) // "My Pictures" Folder | ||
502 | - .R(Environment.SpecialFolder.Personal) // "My Document" Folder | ||
503 | - .R(Environment.SpecialFolder.ProgramFiles) // Program files Folder | ||
504 | - .R(Environment.SpecialFolder.Programs) // Programs Folder | ||
505 | - .R(Environment.SpecialFolder.Recent) // Recent Folder | ||
506 | - .R(Environment.SpecialFolder.SendTo) // "Sent to" Folder | ||
507 | - .R(Environment.SpecialFolder.StartMenu) // Start Menu | ||
508 | - .R(Environment.SpecialFolder.Startup) // Startup | ||
509 | - .R(Environment.SpecialFolder.System) // System Folder | ||
510 | - .R(Environment.SpecialFolder.Templates) // Document Templates | 489 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.ApplicationData)// Current User's Application Data |
490 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.CommonApplicationData) // All User's Application Data | ||
491 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.CommonProgramFiles) // Program Files | ||
492 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.Cookies) // Internet Cookie | ||
493 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.Desktop) // Logical Desktop | ||
494 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.DesktopDirectory) // Physical Desktop | ||
495 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.Favorites) // Favorites | ||
496 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.History) // Internet History | ||
497 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.InternetCache) // Internet Cache | ||
498 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.MyComputer) // "My Computer" Folder | ||
499 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.MyDocuments) // "My Documents" Folder | ||
500 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.MyMusic) // "My Music" Folder | ||
501 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.MyPictures) // "My Pictures" Folder | ||
502 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.Personal) // "My Document" Folder | ||
503 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.ProgramFiles) // Program files Folder | ||
504 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.Programs) // Programs Folder | ||
505 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.Recent) // Recent Folder | ||
506 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.SendTo) // "Sent to" Folder | ||
507 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.StartMenu) // Start Menu | ||
508 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.Startup) // Startup | ||
509 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.System) // System Folder | ||
510 | + .SubstituteSpecialFolderName(Environment.SpecialFolder.Templates) // Document Templates | ||
511 | ; | 511 | ; |
512 | } | 512 | } |
513 | } | 513 | } |
@@ -537,9 +537,5 @@ namespace Vrh.Log4Pro.MaintenanceConsole.BackupPackageManagerNS | @@ -537,9 +537,5 @@ namespace Vrh.Log4Pro.MaintenanceConsole.BackupPackageManagerNS | ||
537 | #endregion BackupSQLDataBase class | 537 | #endregion BackupSQLDataBase class |
538 | 538 | ||
539 | } | 539 | } |
540 | - public static class StringExtension | ||
541 | - { | ||
542 | - public static string R(this string s, Environment.SpecialFolder n) { return s.Replace("@" + n.ToString() + "@", Environment.GetFolderPath(n)); } | ||
543 | - } | ||
544 | #endregion BackupPackage class | 540 | #endregion BackupPackage class |
545 | } | 541 | } |
Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs
@@ -862,11 +862,12 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS | @@ -862,11 +862,12 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS | ||
862 | 862 | ||
863 | 863 | ||
864 | List<string> backupfilepathlist = new List<string>(); | 864 | List<string> backupfilepathlist = new List<string>(); |
865 | - foreach (var sqldata in sqld.Xml_SQLDataList) | 865 | + foreach (var sqldata in sqld.Xml_SQLDataList) |
866 | { | 866 | { |
867 | vars[nameof(DBSubstitutionName.DBDATAGROUP)] = sqldata.Group; | 867 | vars[nameof(DBSubstitutionName.DBDATAGROUP)] = sqldata.Group; |
868 | - var sqlfilescreated = ScriptOneDataGroup(sqlserver, tempbackupdirectorypath, backupfilenamemask + backupfilenameext, sqldata.TableNameList, vars); | 868 | + var sqlfilescreated = ScriptOneDataGroup(sqlserver, tempbackupdirectorypath, backupfilenamemask + backupfilenameext, sqldata.TableNameList, vars,out List<string> errormessageList); |
869 | backupfilepathlist.AddRange(sqlfilescreated); | 869 | backupfilepathlist.AddRange(sqlfilescreated); |
870 | + if (errormessageList != null && errormessageList.Any()) { foreach (var emsg in errormessageList) { ColorConsole.WriteLine("\n"+emsg, ConsoleColor.Red); } } | ||
870 | } | 871 | } |
871 | 872 | ||
872 | if (createZip) | 873 | if (createZip) |
@@ -876,8 +877,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS | @@ -876,8 +877,9 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS | ||
876 | } | 877 | } |
877 | } | 878 | } |
878 | } | 879 | } |
879 | - private static List<string> ScriptOneDataGroup(Server sqlserver, string backupdirectorypath, string backupfilenamemask, List<string> tablenamelist, Dictionary<string, string> vars) | 880 | + private static List<string> ScriptOneDataGroup(Server sqlserver, string backupdirectorypath, string backupfilenamemask, List<string> tablenamelist, Dictionary<string, string> vars,out List<string> errormessageList) |
880 | { | 881 | { |
882 | + errormessageList = new List<string>(); | ||
881 | string filename =null , filefullname=null, lastfilefullname = null; | 883 | string filename =null , filefullname=null, lastfilefullname = null; |
882 | var myscripter = new Microsoft.SqlServer.Management.Smo.Scripter(); | 884 | var myscripter = new Microsoft.SqlServer.Management.Smo.Scripter(); |
883 | myscripter.Server = sqlserver; | 885 | myscripter.Server = sqlserver; |
@@ -900,6 +902,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS | @@ -900,6 +902,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS | ||
900 | var backupfilelist = new List<string>(); | 902 | var backupfilelist = new List<string>(); |
901 | var urnstoscript = new UrnCollection(); | 903 | var urnstoscript = new UrnCollection(); |
902 | var deletefromlist = new List<string>(); | 904 | var deletefromlist = new List<string>(); |
905 | + string errmsg; | ||
906 | + bool success; | ||
903 | foreach (var tn in tablenamelist) | 907 | foreach (var tn in tablenamelist) |
904 | { | 908 | { |
905 | string tn_dbname = tn.Split('.')[0]; | 909 | string tn_dbname = tn.Split('.')[0]; |
@@ -911,7 +915,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS | @@ -911,7 +915,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS | ||
911 | filefullname = Path.Combine(backupdirectorypath, filename); | 915 | filefullname = Path.Combine(backupdirectorypath, filename); |
912 | if (lastfilefullname!=filefullname && lastfilefullname!=null) | 916 | if (lastfilefullname!=filefullname && lastfilefullname!=null) |
913 | { | 917 | { |
914 | - backupfilelist.Add(CreateOneSqlFile(urnstoscript, deletefromlist,sqlserver, myscripter, lastfilefullname)); | 918 | + success = CreateOneSqlFile(urnstoscript, deletefromlist, sqlserver, myscripter, lastfilefullname, out errmsg); |
919 | + if (success) { backupfilelist.Add(lastfilefullname); } else { errormessageList.Add(errmsg);} | ||
915 | lastfilefullname = filefullname; | 920 | lastfilefullname = filefullname; |
916 | deletefromlist.Clear(); | 921 | deletefromlist.Clear(); |
917 | urnstoscript.Clear(); | 922 | urnstoscript.Clear(); |
@@ -922,17 +927,27 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS | @@ -922,17 +927,27 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS | ||
922 | urnstoscript.Add(new Microsoft.SqlServer.Management.Sdk.Sfc.Urn(urnstring)); | 927 | urnstoscript.Add(new Microsoft.SqlServer.Management.Sdk.Sfc.Urn(urnstring)); |
923 | lastfilefullname = filefullname; | 928 | lastfilefullname = filefullname; |
924 | } | 929 | } |
925 | - backupfilelist.Add(CreateOneSqlFile(urnstoscript, deletefromlist,sqlserver,myscripter,filefullname)); | 930 | + success = CreateOneSqlFile(urnstoscript, deletefromlist, sqlserver, myscripter, filefullname,out errmsg); |
931 | + if (success) { backupfilelist.Add(filefullname); } else { errormessageList.Add(errmsg); } | ||
926 | return backupfilelist; | 932 | return backupfilelist; |
927 | } | 933 | } |
928 | - private static string CreateOneSqlFile( UrnCollection urnstoscript,List<string> deletefromlist,Server sqlserver,Scripter myscripter, string sqlfilefullname) | 934 | + private static bool CreateOneSqlFile( UrnCollection urnstoscript,List<string> deletefromlist,Server sqlserver,Scripter myscripter, string sqlfilefullname,out string errormessage) |
929 | { | 935 | { |
936 | + errormessage = null; | ||
930 | myscripter.Options.FileName = sqlfilefullname; | 937 | myscripter.Options.FileName = sqlfilefullname; |
931 | - if (urnstoscript.Any()) { myscripter.EnumScript(urnstoscript); } | ||
932 | - var scripttext = File.ReadAllText(sqlfilefullname); | ||
933 | - deletefromlist = deletefromlist.Prepend($"use [{sqlserver.ConnectionContext.DatabaseName}]").ToList(); | ||
934 | - File.WriteAllText(sqlfilefullname, string.Join("\r\n",deletefromlist) +"\r\n\r\n" + scripttext, Encoding.UTF8);//???????????????? | ||
935 | - return sqlfilefullname; | 938 | + try |
939 | + { | ||
940 | + if (urnstoscript.Any()) { myscripter.EnumScript(urnstoscript); } | ||
941 | + var scripttext = File.ReadAllText(sqlfilefullname); | ||
942 | + deletefromlist = deletefromlist.Prepend($"use [{sqlserver.ConnectionContext.DatabaseName}]").ToList(); | ||
943 | + File.WriteAllText(sqlfilefullname, string.Join("\r\n", deletefromlist) + "\r\n\r\n" + scripttext, Encoding.UTF8);//???????????????? | ||
944 | + return true; | ||
945 | + } | ||
946 | + catch (Exception ex) | ||
947 | + { | ||
948 | + errormessage=ex.MessageNested(); | ||
949 | + return false; | ||
950 | + } | ||
936 | } | 951 | } |
937 | #endregion BackupSqlData | 952 | #endregion BackupSqlData |
938 | #endregion private methods | 953 | #endregion private methods |
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.2.2.0")] | ||
36 | -[assembly: AssemblyFileVersion("1.2.2.0")] | 35 | +[assembly: AssemblyVersion("1.2.3.0")] |
36 | +[assembly: AssemblyFileVersion("1.2.3.0")] |