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 | 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 | 103 | BackupPackageManagerCore.CreatePackageFile(bp, tempfolderpath, vars); |
104 | 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 | 108 | #endregion First level Executors with UI |
109 | 109 | |
... | ... | @@ -486,28 +486,28 @@ namespace Vrh.Log4Pro.MaintenanceConsole.BackupPackageManagerNS |
486 | 486 | private string SpecialFolderNameSubstitution(string path) |
487 | 487 | { |
488 | 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 | 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 | 540 | #endregion BackupPackage class |
545 | 541 | } | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs
... | ... | @@ -862,11 +862,12 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
862 | 862 | |
863 | 863 | |
864 | 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 | 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 | 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 | 873 | if (createZip) |
... | ... | @@ -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 | 883 | string filename =null , filefullname=null, lastfilefullname = null; |
882 | 884 | var myscripter = new Microsoft.SqlServer.Management.Smo.Scripter(); |
883 | 885 | myscripter.Server = sqlserver; |
... | ... | @@ -900,6 +902,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
900 | 902 | var backupfilelist = new List<string>(); |
901 | 903 | var urnstoscript = new UrnCollection(); |
902 | 904 | var deletefromlist = new List<string>(); |
905 | + string errmsg; | |
906 | + bool success; | |
903 | 907 | foreach (var tn in tablenamelist) |
904 | 908 | { |
905 | 909 | string tn_dbname = tn.Split('.')[0]; |
... | ... | @@ -911,7 +915,8 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
911 | 915 | filefullname = Path.Combine(backupdirectorypath, filename); |
912 | 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 | 920 | lastfilefullname = filefullname; |
916 | 921 | deletefromlist.Clear(); |
917 | 922 | urnstoscript.Clear(); |
... | ... | @@ -922,17 +927,27 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS |
922 | 927 | urnstoscript.Add(new Microsoft.SqlServer.Management.Sdk.Sfc.Urn(urnstring)); |
923 | 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 | 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 | 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 | 952 | #endregion BackupSqlData |
938 | 953 | #endregion private methods | ... | ... |
Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs
... | ... | @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; |
32 | 32 | // You can specify all the values or you can default the Build and Revision Numbers |
33 | 33 | // by using the '*' as shown below: |
34 | 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")] | ... | ... |