├── Resources
├── Thumbs.db
├── database_up.ico
└── database_down.ico
├── database_process.ico
├── Libraries
├── Microsoft.SqlServer.Smo.dll
├── Microsoft.SqlServer.SmoExtended.dll
├── Microsoft.SqlServer.ConnectionInfo.dll
├── Microsoft.SqlServer.SqlClrProvider.dll
└── Microsoft.SqlServer.Management.Sdk.Sfc.dll
├── Program.cs
├── Logger.cs
├── CommandLineHelper.cs
├── Properties
├── Settings.settings
├── AssemblyInfo.cs
├── Settings.Designer.cs
├── Resources.Designer.cs
└── Resources.resx
├── NC.Util.SqlSrv.BackupRestore.sln
├── .gitattributes
├── frmConfigureSqlConn.cs
├── FTPHelper.cs
├── AboutBox.cs
├── frmConfigureSqlConn.resx
├── .gitignore
├── NC.Util.SqlSrv.BackupRestore.csproj
├── Cryptography.cs
├── frmConfigureSqlConn.Designer.cs
├── AboutBox.Designer.cs
├── MainWin.cs
└── AboutBox.resx
/Resources/Thumbs.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTBlankenship/BackupRestore_Source/HEAD/Resources/Thumbs.db
--------------------------------------------------------------------------------
/database_process.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTBlankenship/BackupRestore_Source/HEAD/database_process.ico
--------------------------------------------------------------------------------
/Resources/database_up.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTBlankenship/BackupRestore_Source/HEAD/Resources/database_up.ico
--------------------------------------------------------------------------------
/Resources/database_down.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTBlankenship/BackupRestore_Source/HEAD/Resources/database_down.ico
--------------------------------------------------------------------------------
/Libraries/Microsoft.SqlServer.Smo.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTBlankenship/BackupRestore_Source/HEAD/Libraries/Microsoft.SqlServer.Smo.dll
--------------------------------------------------------------------------------
/Libraries/Microsoft.SqlServer.SmoExtended.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTBlankenship/BackupRestore_Source/HEAD/Libraries/Microsoft.SqlServer.SmoExtended.dll
--------------------------------------------------------------------------------
/Libraries/Microsoft.SqlServer.ConnectionInfo.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTBlankenship/BackupRestore_Source/HEAD/Libraries/Microsoft.SqlServer.ConnectionInfo.dll
--------------------------------------------------------------------------------
/Libraries/Microsoft.SqlServer.SqlClrProvider.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTBlankenship/BackupRestore_Source/HEAD/Libraries/Microsoft.SqlServer.SqlClrProvider.dll
--------------------------------------------------------------------------------
/Libraries/Microsoft.SqlServer.Management.Sdk.Sfc.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CTBlankenship/BackupRestore_Source/HEAD/Libraries/Microsoft.SqlServer.Management.Sdk.Sfc.dll
--------------------------------------------------------------------------------
/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Windows.Forms;
4 |
5 | namespace NC.Util.SqlSrv.BackupRestore
6 | {
7 | static class Program
8 | {
9 | ///
10 | /// The main entry point for the application.
11 | ///
12 | [STAThread]
13 | static void Main()
14 | {
15 | Application.EnableVisualStyles();
16 | Application.SetCompatibleTextRenderingDefault(false);
17 | Application.Run(new MainWin());
18 | }
19 | }
20 | }
--------------------------------------------------------------------------------
/Logger.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 |
4 | namespace NC.Util.SqlSrv.BackupRestore
5 | {
6 | public static class Logger
7 | {
8 | // ------------------------------------------------
9 | // CTB: 2019/10/27
10 | // Prefix the message to log with a date time stamp
11 | // ------------------------------------------------
12 | public static void LogMessage(string messageToLog)
13 | {
14 | string logFileName = Environment.CurrentDirectory + @"\LogFile.txt";
15 |
16 | using (StreamWriter file = new StreamWriter(logFileName, true))
17 | {
18 | messageToLog = $"{DateTime.Now:yyyy.MM.dd hh:mm:ss}: {messageToLog}";
19 | file.WriteLine(messageToLog);
20 | }
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/CommandLineHelper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | // ReSharper disable InvalidXmlDocComment
4 |
5 | namespace NC.Util.SqlSrv.BackupRestore
6 | {
7 | public static class CommandLineHelper
8 | {
9 |
10 | public static void LaunchNotepadToViewLogFile()
11 | {
12 | try
13 | {
14 | ProcessStartInfo procStartInfo = new ProcessStartInfo
15 | {
16 | FileName = "notepad.exe",
17 | Arguments = Environment.CurrentDirectory + @"\LogFile.txt"
18 | };
19 |
20 | Process proc = new Process { StartInfo = procStartInfo };
21 | proc.Start();
22 | proc.Dispose();
23 | }
24 | catch (Exception)
25 | {
26 | throw;
27 | }
28 |
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | <?xml version="1.0" encoding="utf-16"?>
7 | <SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
8 | <ConnectionString>Data Source=.\SQL2005;Initial Catalog=master;User ID=sa;Password=sqladmin123</ConnectionString>
9 | <ProviderName>System.Data.SqlClient</ProviderName>
10 | </SerializableConnectionString>
11 | Data Source=.\SQL2005;Initial Catalog=master;User ID=sa;Password=sqladmin123
12 |
13 |
14 |
--------------------------------------------------------------------------------
/NC.Util.SqlSrv.BackupRestore.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.29418.71
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NC.Util.SqlSrv.BackupRestore", "NC.Util.SqlSrv.BackupRestore.csproj", "{737E2FC3-BAED-4FFA-8360-95CFF86CE34B}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {737E2FC3-BAED-4FFA-8360-95CFF86CE34B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {737E2FC3-BAED-4FFA-8360-95CFF86CE34B}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {737E2FC3-BAED-4FFA-8360-95CFF86CE34B}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {737E2FC3-BAED-4FFA-8360-95CFF86CE34B}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {D57E48C9-589D-43D7-B0BB-1E26ADF7CFE9}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("SqlServer Backup/Restore Utility")]
9 | [assembly: AssemblyDescription("SqlServer Backup/Restore Utility is an utility to help backup and restore SqlServer database without Sql Server Management Studio (/Express) installed. With questions about utility you may write me at: ct@novantconsulting.com")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("Novant Consulting")]
12 | [assembly: AssemblyProduct("BackupRestore")]
13 | [assembly: AssemblyCopyright("Novant Consulting, Inc.")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("44014862-d6a7-4f8b-aa3d-aa6b29f863fc")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | [assembly: AssemblyVersion("1.0.0.1")]
33 | [assembly: AssemblyFileVersion("1.0.0.1")]
34 |
--------------------------------------------------------------------------------
/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace NC.Util.SqlSrv.BackupRestore.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 |
26 | [global::System.Configuration.ApplicationScopedSettingAttribute()]
27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
28 | [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
29 | [global::System.Configuration.DefaultSettingValueAttribute("Data Source=.\\SQL2005;Initial Catalog=master;User ID=sa;Password=sqladmin123")]
30 | public string masterConnectionString {
31 | get {
32 | return ((string)(this["masterConnectionString"]));
33 | }
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace NC.Util.SqlSrv.BackupRestore.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NC.Util.SqlSrv.BackupRestore.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 |
63 | ///
64 | /// Looks up a localized resource of type System.Drawing.Bitmap.
65 | ///
66 | internal static System.Drawing.Bitmap database_down {
67 | get {
68 | object obj = ResourceManager.GetObject("database_down", resourceCulture);
69 | return ((System.Drawing.Bitmap)(obj));
70 | }
71 | }
72 |
73 | ///
74 | /// Looks up a localized resource of type System.Drawing.Bitmap.
75 | ///
76 | internal static System.Drawing.Bitmap database_up {
77 | get {
78 | object obj = ResourceManager.GetObject("database_up", resourceCulture);
79 | return ((System.Drawing.Bitmap)(obj));
80 | }
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/frmConfigureSqlConn.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Data;
3 | using System.Data.Sql;
4 | using System.Data.SqlClient;
5 | using System.Windows.Forms;
6 |
7 | namespace NC.Util.SqlSrv.BackupRestore
8 | {
9 | // ReSharper disable once InconsistentNaming
10 | public partial class frmConfigureSqlConn : Form
11 | {
12 | public string ConnectionString = String.Empty;
13 |
14 | public frmConfigureSqlConn()
15 | {
16 | InitializeComponent();
17 | PopulateComboBoxes();
18 | }
19 |
20 | private void cmdGetSqlServers_Click(object sender, EventArgs e)
21 | {
22 | SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
23 | DataTable dtServers = instance.GetDataSources();
24 | if (dtServers.Rows.Count > 0)
25 | {
26 | foreach (DataRow dr in dtServers.Rows)
27 | {
28 | string serverInstanceName;
29 | string serverName = dr["ServerName"].ToString();
30 | string instanceName = dr["InstanceName"].ToString();
31 | if (instanceName == String.Empty)
32 | {
33 | serverInstanceName = serverName;
34 | }
35 | else
36 | {
37 | serverInstanceName = serverName + @"\" + instanceName;
38 | }
39 |
40 | cboAvailableSQLServers.Items.Add(serverInstanceName);
41 | }
42 | }
43 | else
44 | {
45 | cboAvailableSQLServers.Items.Add("CTB-MAXIMUS-PC");
46 | }
47 |
48 | if (cboAvailableSQLServers.Items.Count > 0)
49 | {
50 | cboAvailableSQLServers.SelectedIndex = 0;
51 | }
52 | }
53 |
54 | private void PopulateComboBoxes()
55 | {
56 | cboAuthentication.Items.Add("Windows Authentication");
57 | cboAuthentication.Items.Add("SQL Server Authentication");
58 | cboAuthentication.SelectedIndex = 0;
59 | }
60 |
61 | private void cboAuthentication_SelectionChangeCommitted(object sender, EventArgs e)
62 | {
63 | string authentication = cboAuthentication.SelectedItem.ToString();
64 | if (authentication == "SQL Server Authentication")
65 | {
66 | txtLogin.Enabled = true;
67 | txtPassword.Enabled = true;
68 | }
69 | else
70 | {
71 | txtLogin.Enabled = false;
72 | txtPassword.Enabled = false;
73 | txtLogin.Text = String.Empty;
74 | txtPassword.Text = String.Empty;
75 | }
76 | }
77 |
78 | private void cmdTestConnection_Click(object sender, EventArgs e)
79 | {
80 | string authentication = cboAuthentication.SelectedItem.ToString();
81 | string connString = "";
82 |
83 | if (authentication == "Windows Authentication")
84 | {
85 | connString = String.Format("Server={0};Database=master;Trusted_Connection=True", cboAvailableSQLServers.SelectedItem);
86 | }
87 | else if(authentication == "SQL Server Authentication")
88 | {
89 | connString = String.Format("Server={0};Database=master;User Id={1};Password={2};",cboAvailableSQLServers.SelectedItem, txtLogin.Text, txtPassword.Text);
90 | }
91 |
92 | txtConnectionString.Text = connString;
93 | ConnectionString = txtConnectionString.Text;
94 |
95 | try
96 | {
97 | // ReSharper disable once UnusedVariable
98 | using (SqlConnection sqlConn = new SqlConnection(connString))
99 | {
100 | MessageBox.Show(@"SQL Connection succeeded!!!", @"SQL Backup and Restore Utility");
101 | }
102 | }
103 | catch (Exception)
104 | {
105 | MessageBox.Show(@"SQL Connection test failed ... see the connection string below for possible anomalies.", @"SQL Backup and Restore Utility");
106 | }
107 | }
108 |
109 | private void cmdOK_Click(object sender, EventArgs e)
110 | {
111 | Hide();
112 | }
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/FTPHelper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Net;
7 | using System.Net.Cache;
8 | using System.IO;
9 | using System.Windows.Forms;
10 |
11 |
12 | namespace NC.Util.SqlSrv.BackupRestore
13 | {
14 |
15 | // --------------------------------------------------------------------------------
16 | // https://stackoverflow.com/questions/16005388/how-to-copy-a-file-on-an-ftp-server
17 | // --------------------------------------------------------------------------------
18 | public static class FTPHelper
19 | {
20 |
21 | public static void PostDataToFTP()
22 | {
23 | try
24 | {
25 | FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://novantconsulting.com" + @"/" + "TestFile0.txt");
26 | request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable);
27 | request.Method = WebRequestMethods.Ftp.UploadFile;
28 | request.Credentials = new NetworkCredential("CTBlankenship", "Babylon5");
29 | // Copy the contents of the file to the request stream.
30 | StreamReader sourceStream = new StreamReader(@"E:\StrataFrame.bak");
31 | byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
32 | sourceStream.Close();
33 | request.ContentLength = fileContents.Length;
34 | Stream requestStream = request.GetRequestStream();
35 | requestStream.Write(fileContents, 0, fileContents.Length);
36 | requestStream.Close();
37 | FtpWebResponse response = (FtpWebResponse)request.GetResponse();
38 | Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);
39 |
40 | response.Close();
41 | }
42 | catch (WebException e)
43 | {
44 | Console.WriteLine(e.Message.ToString());
45 | String status = ((FtpWebResponse)e.Response).StatusDescription;
46 | Console.WriteLine(status);
47 | }
48 | catch (Exception ex)
49 | {
50 | Console.WriteLine(ex.Message.ToString());
51 | }
52 | }
53 |
54 | public static bool CopyFile(string FtpSite = @"ftp://novantconsulting.com/SQLBackups/Novant/", string fileName = "StrataFrame.bak", string FileToCopy = @"E:\SEPARCSecurity.txt", string userName = "CTBlankenship75", string password= "Babylon5")
55 |
56 | {
57 | try
58 | {
59 | FtpWebRequest request = (FtpWebRequest) WebRequest.Create(FtpSite + fileName);
60 | request.Method = WebRequestMethods.Ftp.DownloadFile;
61 | request.Credentials = new NetworkCredential(userName, password);
62 | FtpWebResponse response = (FtpWebResponse) request.GetResponse();
63 | Stream responseStream = response.GetResponseStream();
64 | Upload(FtpSite + @"\" + FileToCopy, ToByteArray(responseStream), userName, password);
65 | responseStream.Close();
66 | return true;
67 | }
68 | catch (Exception e)
69 | {
70 | MessageBox.Show(e.ToString());
71 |
72 | return false;
73 | }
74 | }
75 |
76 | private static Byte[] ToByteArray(Stream stream)
77 | {
78 | MemoryStream ms = new MemoryStream();
79 | byte[] chunk = new byte[4096];
80 | int bytesRead;
81 | while ((bytesRead = stream.Read(chunk, 0, chunk.Length)) > 0)
82 | {
83 | ms.Write(chunk, 0, bytesRead);
84 | }
85 |
86 | return ms.ToArray();
87 | }
88 |
89 | private static bool Upload(string FileName, byte[] Image, string FtpUsername, string FtpPassword)
90 | {
91 | try
92 | {
93 | System.Net.FtpWebRequest clsRequest = (System.Net.FtpWebRequest) System.Net.WebRequest.Create(FileName);
94 | clsRequest.Credentials = new System.Net.NetworkCredential(FtpUsername, FtpPassword);
95 | clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
96 | System.IO.Stream clsStream = clsRequest.GetRequestStream();
97 | clsStream.Write(Image, 0, Image.Length);
98 |
99 | clsStream.Close();
100 | clsStream.Dispose();
101 | return true;
102 | }
103 | catch
104 | {
105 | return false;
106 | }
107 | }
108 |
109 |
110 |
111 | }
112 | }
113 |
--------------------------------------------------------------------------------
/AboutBox.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Drawing;
5 | using System.Windows.Forms;
6 | using System.Reflection;
7 |
8 | namespace NC.Util.SqlSrv.BackupRestore
9 | {
10 | partial class AboutBox : Form
11 | {
12 | public AboutBox()
13 | {
14 | InitializeComponent();
15 |
16 | // Initialize the AboutBox to display the product information from the assembly information.
17 | // Change assembly information settings for your application through either:
18 | // - Project->Properties->Application->Assembly Information
19 | // - AssemblyInfo.cs
20 | this.Text = String.Format("About {0}", AssemblyTitle);
21 | this.labelProductName.Text = AssemblyProduct;
22 | this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion);
23 | this.labelCopyright.Text = AssemblyCopyright;
24 | this.labelCompanyName.Text = AssemblyCompany;
25 | this.textBoxDescription.Text = AssemblyDescription;
26 | }
27 |
28 | #region Assembly Attribute Accessors
29 |
30 | public string AssemblyTitle
31 | {
32 | get
33 | {
34 | // Get all Title attributes on this assembly
35 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
36 | // If there is at least one Title attribute
37 | if (attributes.Length > 0)
38 | {
39 | // Select the first one
40 | AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
41 | // If it is not an empty string, return it
42 | if (titleAttribute.Title != "")
43 | return titleAttribute.Title;
44 | }
45 | // If there was no Title attribute, or if the Title attribute was the empty string, return the .exe name
46 | return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
47 | }
48 | }
49 |
50 | public string AssemblyVersion
51 | {
52 | get
53 | {
54 | return Assembly.GetExecutingAssembly().GetName().Version.ToString();
55 | }
56 | }
57 |
58 | public string AssemblyDescription
59 | {
60 | get
61 | {
62 | // Get all Description attributes on this assembly
63 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
64 | // If there aren't any Description attributes, return an empty string
65 | if (attributes.Length == 0)
66 | return "";
67 | // If there is a Description attribute, return its value
68 | return ((AssemblyDescriptionAttribute)attributes[0]).Description;
69 | }
70 | }
71 |
72 | public string AssemblyProduct
73 | {
74 | get
75 | {
76 | // Get all Product attributes on this assembly
77 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
78 | // If there aren't any Product attributes, return an empty string
79 | if (attributes.Length == 0)
80 | return "";
81 | // If there is a Product attribute, return its value
82 | return ((AssemblyProductAttribute)attributes[0]).Product;
83 | }
84 | }
85 |
86 | public string AssemblyCopyright
87 | {
88 | get
89 | {
90 | // Get all Copyright attributes on this assembly
91 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
92 | // If there aren't any Copyright attributes, return an empty string
93 | if (attributes.Length == 0)
94 | return "";
95 | // If there is a Copyright attribute, return its value
96 | return ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
97 | }
98 | }
99 |
100 | public string AssemblyCompany
101 | {
102 | get
103 | {
104 | // Get all Company attributes on this assembly
105 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
106 | // If there aren't any Company attributes, return an empty string
107 | if (attributes.Length == 0)
108 | return "";
109 | // If there is a Company attribute, return its value
110 | return ((AssemblyCompanyAttribute)attributes[0]).Company;
111 | }
112 | }
113 | #endregion
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/frmConfigureSqlConn.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 | ..\Resources\database_down.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
123 |
124 |
125 | ..\Resources\database_up.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
126 |
127 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Build results
17 | [Dd]ebug/
18 | [Dd]ebugPublic/
19 | [Rr]elease/
20 | [Rr]eleases/
21 | x64/
22 | x86/
23 | [Aa][Rr][Mm]/
24 | [Aa][Rr][Mm]64/
25 | bld/
26 | [Bb]in/
27 | [Oo]bj/
28 | [Ll]og/
29 |
30 | # Visual Studio 2015/2017 cache/options directory
31 | .vs/
32 | # Uncomment if you have tasks that create the project's static files in wwwroot
33 | #wwwroot/
34 |
35 | # Visual Studio 2017 auto generated files
36 | Generated\ Files/
37 |
38 | # MSTest test Results
39 | [Tt]est[Rr]esult*/
40 | [Bb]uild[Ll]og.*
41 |
42 | # NUNIT
43 | *.VisualState.xml
44 | TestResult.xml
45 |
46 | # Build Results of an ATL Project
47 | [Dd]ebugPS/
48 | [Rr]eleasePS/
49 | dlldata.c
50 |
51 | # Benchmark Results
52 | BenchmarkDotNet.Artifacts/
53 |
54 | # .NET Core
55 | project.lock.json
56 | project.fragment.lock.json
57 | artifacts/
58 |
59 | # StyleCop
60 | StyleCopReport.xml
61 |
62 | # Files built by Visual Studio
63 | *_i.c
64 | *_p.c
65 | *_h.h
66 | *.ilk
67 | *.meta
68 | *.obj
69 | *.iobj
70 | *.pch
71 | *.pdb
72 | *.ipdb
73 | *.pgc
74 | *.pgd
75 | *.rsp
76 | *.sbr
77 | *.tlb
78 | *.tli
79 | *.tlh
80 | *.tmp
81 | *.tmp_proj
82 | *_wpftmp.csproj
83 | *.log
84 | *.vspscc
85 | *.vssscc
86 | .builds
87 | *.pidb
88 | *.svclog
89 | *.scc
90 |
91 | # Chutzpah Test files
92 | _Chutzpah*
93 |
94 | # Visual C++ cache files
95 | ipch/
96 | *.aps
97 | *.ncb
98 | *.opendb
99 | *.opensdf
100 | *.sdf
101 | *.cachefile
102 | *.VC.db
103 | *.VC.VC.opendb
104 |
105 | # Visual Studio profiler
106 | *.psess
107 | *.vsp
108 | *.vspx
109 | *.sap
110 |
111 | # Visual Studio Trace Files
112 | *.e2e
113 |
114 | # TFS 2012 Local Workspace
115 | $tf/
116 |
117 | # Guidance Automation Toolkit
118 | *.gpState
119 |
120 | # ReSharper is a .NET coding add-in
121 | _ReSharper*/
122 | *.[Rr]e[Ss]harper
123 | *.DotSettings.user
124 |
125 | # JustCode is a .NET coding add-in
126 | .JustCode
127 |
128 | # TeamCity is a build add-in
129 | _TeamCity*
130 |
131 | # DotCover is a Code Coverage Tool
132 | *.dotCover
133 |
134 | # AxoCover is a Code Coverage Tool
135 | .axoCover/*
136 | !.axoCover/settings.json
137 |
138 | # Visual Studio code coverage results
139 | *.coverage
140 | *.coveragexml
141 |
142 | # NCrunch
143 | _NCrunch_*
144 | .*crunch*.local.xml
145 | nCrunchTemp_*
146 |
147 | # MightyMoose
148 | *.mm.*
149 | AutoTest.Net/
150 |
151 | # Web workbench (sass)
152 | .sass-cache/
153 |
154 | # Installshield output folder
155 | [Ee]xpress/
156 |
157 | # DocProject is a documentation generator add-in
158 | DocProject/buildhelp/
159 | DocProject/Help/*.HxT
160 | DocProject/Help/*.HxC
161 | DocProject/Help/*.hhc
162 | DocProject/Help/*.hhk
163 | DocProject/Help/*.hhp
164 | DocProject/Help/Html2
165 | DocProject/Help/html
166 |
167 | # Click-Once directory
168 | publish/
169 |
170 | # Publish Web Output
171 | *.[Pp]ublish.xml
172 | *.azurePubxml
173 | # Note: Comment the next line if you want to checkin your web deploy settings,
174 | # but database connection strings (with potential passwords) will be unencrypted
175 | *.pubxml
176 | *.publishproj
177 |
178 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
179 | # checkin your Azure Web App publish settings, but sensitive information contained
180 | # in these scripts will be unencrypted
181 | PublishScripts/
182 |
183 | # NuGet Packages
184 | *.nupkg
185 | # The packages folder can be ignored because of Package Restore
186 | **/[Pp]ackages/*
187 | # except build/, which is used as an MSBuild target.
188 | !**/[Pp]ackages/build/
189 | # Uncomment if necessary however generally it will be regenerated when needed
190 | #!**/[Pp]ackages/repositories.config
191 | # NuGet v3's project.json files produces more ignorable files
192 | *.nuget.props
193 | *.nuget.targets
194 |
195 | # Microsoft Azure Build Output
196 | csx/
197 | *.build.csdef
198 |
199 | # Microsoft Azure Emulator
200 | ecf/
201 | rcf/
202 |
203 | # Windows Store app package directories and files
204 | AppPackages/
205 | BundleArtifacts/
206 | Package.StoreAssociation.xml
207 | _pkginfo.txt
208 | *.appx
209 |
210 | # Visual Studio cache files
211 | # files ending in .cache can be ignored
212 | *.[Cc]ache
213 | # but keep track of directories ending in .cache
214 | !?*.[Cc]ache/
215 |
216 | # Others
217 | ClientBin/
218 | ~$*
219 | *~
220 | *.dbmdl
221 | *.dbproj.schemaview
222 | *.jfm
223 | *.pfx
224 | *.publishsettings
225 | orleans.codegen.cs
226 |
227 | # Including strong name files can present a security risk
228 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
229 | #*.snk
230 |
231 | # Since there are multiple workflows, uncomment next line to ignore bower_components
232 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
233 | #bower_components/
234 |
235 | # RIA/Silverlight projects
236 | Generated_Code/
237 |
238 | # Backup & report files from converting an old project file
239 | # to a newer Visual Studio version. Backup files are not needed,
240 | # because we have git ;-)
241 | _UpgradeReport_Files/
242 | Backup*/
243 | UpgradeLog*.XML
244 | UpgradeLog*.htm
245 | ServiceFabricBackup/
246 | *.rptproj.bak
247 |
248 | # SQL Server files
249 | *.mdf
250 | *.ldf
251 | *.ndf
252 |
253 | # Business Intelligence projects
254 | *.rdl.data
255 | *.bim.layout
256 | *.bim_*.settings
257 | *.rptproj.rsuser
258 | *- Backup*.rdl
259 |
260 | # Microsoft Fakes
261 | FakesAssemblies/
262 |
263 | # GhostDoc plugin setting file
264 | *.GhostDoc.xml
265 |
266 | # Node.js Tools for Visual Studio
267 | .ntvs_analysis.dat
268 | node_modules/
269 |
270 | # Visual Studio 6 build log
271 | *.plg
272 |
273 | # Visual Studio 6 workspace options file
274 | *.opt
275 |
276 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
277 | *.vbw
278 |
279 | # Visual Studio LightSwitch build output
280 | **/*.HTMLClient/GeneratedArtifacts
281 | **/*.DesktopClient/GeneratedArtifacts
282 | **/*.DesktopClient/ModelManifest.xml
283 | **/*.Server/GeneratedArtifacts
284 | **/*.Server/ModelManifest.xml
285 | _Pvt_Extensions
286 |
287 | # Paket dependency manager
288 | .paket/paket.exe
289 | paket-files/
290 |
291 | # FAKE - F# Make
292 | .fake/
293 |
294 | # JetBrains Rider
295 | .idea/
296 | *.sln.iml
297 |
298 | # CodeRush personal settings
299 | .cr/personal
300 |
301 | # Python Tools for Visual Studio (PTVS)
302 | __pycache__/
303 | *.pyc
304 |
305 | # Cake - Uncomment if you are using it
306 | # tools/**
307 | # !tools/packages.config
308 |
309 | # Tabs Studio
310 | *.tss
311 |
312 | # Telerik's JustMock configuration file
313 | *.jmconfig
314 |
315 | # BizTalk build output
316 | *.btp.cs
317 | *.btm.cs
318 | *.odx.cs
319 | *.xsd.cs
320 |
321 | # OpenCover UI analysis results
322 | OpenCover/
323 |
324 | # Azure Stream Analytics local run output
325 | ASALocalRun/
326 |
327 | # MSBuild Binary and Structured Log
328 | *.binlog
329 |
330 | # NVidia Nsight GPU debugger configuration file
331 | *.nvuser
332 |
333 | # MFractors (Xamarin productivity tool) working folder
334 | .mfractor/
335 |
336 | # Local History for Visual Studio
337 | .localhistory/
338 |
339 | # BeatPulse healthcheck temp database
340 | healthchecksdb
--------------------------------------------------------------------------------
/NC.Util.SqlSrv.BackupRestore.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | 8.0.50727
7 | 2.0
8 | {737E2FC3-BAED-4FFA-8360-95CFF86CE34B}
9 | WinExe
10 | Properties
11 | NC.Util.SqlSrv.BackupRestore
12 | BackupRestore
13 | database_process.ico
14 | v4.5.1
15 |
16 |
17 |
18 |
19 | 2.0
20 | false
21 |
22 | publish\
23 | true
24 | Disk
25 | false
26 | Foreground
27 | 7
28 | Days
29 | false
30 | false
31 | true
32 | 0
33 | 1.0.0.%2a
34 | false
35 | true
36 |
37 |
38 | true
39 | full
40 | false
41 | bin\Debug\
42 | DEBUG;TRACE
43 | prompt
44 | 4
45 | false
46 |
47 |
48 | pdbonly
49 | true
50 | bin\Release\
51 | TRACE
52 | prompt
53 | 4
54 | false
55 |
56 |
57 | true
58 |
59 |
60 |
61 | False
62 | Libraries\Microsoft.SqlServer.ConnectionInfo.dll
63 |
64 |
65 | False
66 | Libraries\Microsoft.SqlServer.Management.Sdk.Sfc.dll
67 |
68 |
69 | False
70 | Libraries\Microsoft.SqlServer.Smo.dll
71 |
72 |
73 | False
74 | Libraries\Microsoft.SqlServer.SmoExtended.dll
75 |
76 |
77 | False
78 | Libraries\Microsoft.SqlServer.SqlClrProvider.dll
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 | Form
95 |
96 |
97 | AboutBox.cs
98 |
99 |
100 |
101 |
102 | Form
103 |
104 |
105 | frmConfigureSqlConn.cs
106 |
107 |
108 |
109 |
110 | Form
111 |
112 |
113 | MainWin.cs
114 |
115 |
116 |
117 |
118 | Designer
119 | AboutBox.cs
120 |
121 |
122 | frmConfigureSqlConn.cs
123 |
124 |
125 | Designer
126 | MainWin.cs
127 |
128 |
129 | ResXFileCodeGenerator
130 | Resources.Designer.cs
131 | Designer
132 |
133 |
134 | True
135 | Resources.resx
136 | True
137 |
138 |
139 | SettingsSingleFileGenerator
140 | Settings.Designer.cs
141 |
142 |
143 | True
144 | Settings.settings
145 | True
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 | False
160 | .NET Framework 3.5 SP1 Client Profile
161 | false
162 |
163 |
164 | False
165 | .NET Framework 3.5 SP1
166 | true
167 |
168 |
169 |
170 |
177 |
--------------------------------------------------------------------------------
/Cryptography.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 | using System.Security.Cryptography;
8 |
9 | namespace NC.Util.SqlSrv.BackupRestore
10 | {
11 | // ------------------------------------------------------------------------------------------
12 | // https://www.c-sharpcorner.com/UploadFile/f8fa6c/data-encryption-and-decryption-in-C-Sharp/
13 | // ------------------------------------------------------------------------------------------
14 | public static class Cryptography
15 | {
16 | public static string EncryptData(string input, string key)
17 | {
18 | byte[] inputArray = UTF8Encoding.UTF8.GetBytes(input);
19 | TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
20 | tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
21 | tripleDES.Mode = CipherMode.ECB;
22 | tripleDES.Padding = PaddingMode.PKCS7;
23 | ICryptoTransform cTransform = tripleDES.CreateEncryptor();
24 | byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
25 | tripleDES.Clear();
26 | return Convert.ToBase64String(resultArray, 0, resultArray.Length);
27 | }
28 |
29 | public static string DecryptData(string input, string key)
30 | {
31 | byte[] inputArray = Convert.FromBase64String(input);
32 | TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider();
33 | tripleDES.Key = UTF8Encoding.UTF8.GetBytes(key);
34 | tripleDES.Mode = CipherMode.ECB;
35 | tripleDES.Padding = PaddingMode.PKCS7;
36 | ICryptoTransform cTransform = tripleDES.CreateDecryptor();
37 | byte[] resultArray = cTransform.TransformFinalBlock(inputArray, 0, inputArray.Length);
38 | tripleDES.Clear();
39 | return UTF8Encoding.UTF8.GetString(resultArray);
40 | }
41 |
42 | public static string EncryptDataDES(string strData, string strEncDcKey)
43 | {
44 | byte[] key = { }; //Encryption Key
45 | byte[] IV = { 10, 20, 30, 40, 50, 60, 70, 80 };
46 | byte[] inputByteArray;
47 | try
48 | {
49 | key = Encoding.UTF8.GetBytes(strEncDcKey);
50 | // DESCryptoServiceProvider is a cryptography class defind in c#.
51 | DESCryptoServiceProvider ObjDES = new DESCryptoServiceProvider();
52 | inputByteArray = Encoding.UTF8.GetBytes(strData);
53 | MemoryStream Objmst = new MemoryStream();
54 | CryptoStream Objcs = new CryptoStream(Objmst, ObjDES.CreateEncryptor(key, IV), CryptoStreamMode.Write);
55 | Objcs.Write(inputByteArray, 0, inputByteArray.Length);
56 | Objcs.FlushFinalBlock();
57 | return Convert.ToBase64String(Objmst.ToArray());//encrypted string
58 | }
59 | catch (System.Exception ex)
60 | {
61 | throw ex;
62 | }
63 | }
64 |
65 | public static string DecryptDataDES(string strData, string strEndDcKey)
66 | {
67 | byte[] key = { };// Key
68 | byte[] IV = { 10, 20, 30, 40, 50, 60, 70, 80 };
69 | byte[] inputByteArray = new byte[strData.Length];
70 | try
71 | {
72 | key = Encoding.UTF8.GetBytes(strEndDcKey);
73 | DESCryptoServiceProvider ObjDES = new DESCryptoServiceProvider();
74 | inputByteArray = Convert.FromBase64String(strData);
75 | MemoryStream Objmst = new MemoryStream();
76 | CryptoStream Objcs = new CryptoStream(Objmst, ObjDES.CreateDecryptor(key, IV), CryptoStreamMode.Write);
77 | Objcs.Write(inputByteArray, 0, inputByteArray.Length);
78 | Objcs.FlushFinalBlock();
79 | Encoding encoding = Encoding.UTF8;
80 | return encoding.GetString(Objmst.ToArray());
81 | }
82 | catch (System.Exception ex)
83 | {
84 | throw ex;
85 | }
86 | }
87 |
88 | public static string EncryptDataAES(string textData, string Encryptionkey)
89 | {
90 | RijndaelManaged objrij = new RijndaelManaged();
91 | //set the mode for operation of the algorithm
92 | objrij.Mode = CipherMode.CBC;
93 | //set the padding mode used in the algorithm.
94 | objrij.Padding = PaddingMode.PKCS7;
95 | //set the size, in bits, for the secret key.
96 | objrij.KeySize = 0x80;
97 | //set the block size in bits for the cryptographic operation.
98 | objrij.BlockSize = 0x80;
99 | //set the symmetric key that is used for encryption & decryption.
100 | byte[] passBytes = Encoding.UTF8.GetBytes(Encryptionkey);
101 | //set the initialization vector (IV) for the symmetric algorithm
102 | byte[] EncryptionkeyBytes = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
103 | int len = passBytes.Length;
104 | if (len > EncryptionkeyBytes.Length)
105 | {
106 | len = EncryptionkeyBytes.Length;
107 | }
108 | Array.Copy(passBytes, EncryptionkeyBytes, len);
109 | objrij.Key = EncryptionkeyBytes;
110 | objrij.IV = EncryptionkeyBytes;
111 | //Creates symmetric AES object with the current key and initialization vector IV.
112 | ICryptoTransform objtransform = objrij.CreateEncryptor();
113 | byte[] textDataByte = Encoding.UTF8.GetBytes(textData);
114 | //Final transform the test string.
115 | return Convert.ToBase64String(objtransform.TransformFinalBlock(textDataByte, 0, textDataByte.Length));
116 | }
117 |
118 | public static string DecryptDataAES(string EncryptedText, string Encryptionkey)
119 | {
120 | RijndaelManaged objrij = new RijndaelManaged();
121 | objrij.Mode = CipherMode.CBC;
122 | objrij.Padding = PaddingMode.PKCS7;
123 | objrij.KeySize = 0x80;
124 | objrij.BlockSize = 0x80;
125 | byte[] encryptedTextByte = Convert.FromBase64String(EncryptedText);
126 | byte[] passBytes = Encoding.UTF8.GetBytes(Encryptionkey);
127 | byte[] EncryptionkeyBytes = new byte[0x10];
128 | int len = passBytes.Length;
129 | if (len > EncryptionkeyBytes.Length)
130 | {
131 | len = EncryptionkeyBytes.Length;
132 | }
133 | Array.Copy(passBytes, EncryptionkeyBytes, len);
134 | objrij.Key = EncryptionkeyBytes;
135 | objrij.IV = EncryptionkeyBytes;
136 | byte[] TextByte = objrij.CreateDecryptor().TransformFinalBlock(encryptedTextByte, 0, encryptedTextByte.Length);
137 | return Encoding.UTF8.GetString(TextByte); //it will return readable string
138 | }
139 | }
140 |
141 | //---------------------------------------------------------------
142 | // https://tekeye.uk/visual_studio/encrypt-decrypt-c-sharp-string
143 | //---------------------------------------------------------------
144 | public static class CryptographyCBC
145 | {
146 | // This size of the IV (in bytes) must = (keysize / 8). Default keysize is 256, so the IV must be
147 | // 32 bytes long. Using a 16 character string here gives us 32 bytes when converted to a byte array.
148 | private const string initVector = "pemgail9uzpgzl88";
149 | // This constant is used to determine the keysize of the encryption algorithm
150 | private const int keysize = 256;
151 | //Encrypt
152 | public static string EncryptString(string plainText, string passPhrase)
153 | {
154 | byte[] initVectorBytes = Encoding.UTF8.GetBytes(initVector);
155 | byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
156 | PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null);
157 | byte[] keyBytes = password.GetBytes(keysize / 8);
158 | RijndaelManaged symmetricKey = new RijndaelManaged();
159 | symmetricKey.Mode = CipherMode.CBC;
160 | ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);
161 | MemoryStream memoryStream = new MemoryStream();
162 | CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
163 | cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
164 | cryptoStream.FlushFinalBlock();
165 | byte[] cipherTextBytes = memoryStream.ToArray();
166 | memoryStream.Close();
167 | cryptoStream.Close();
168 | return Convert.ToBase64String(cipherTextBytes);
169 | }
170 | //Decrypt
171 | public static string DecryptString(string cipherText, string passPhrase)
172 | {
173 | byte[] initVectorBytes = Encoding.UTF8.GetBytes(initVector);
174 | byte[] cipherTextBytes = Convert.FromBase64String(cipherText);
175 | PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null);
176 | byte[] keyBytes = password.GetBytes(keysize / 8);
177 | RijndaelManaged symmetricKey = new RijndaelManaged();
178 | symmetricKey.Mode = CipherMode.CBC;
179 | ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);
180 | MemoryStream memoryStream = new MemoryStream(cipherTextBytes);
181 | CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
182 | byte[] plainTextBytes = new byte[cipherTextBytes.Length];
183 | int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
184 | memoryStream.Close();
185 | cryptoStream.Close();
186 | return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
187 | }
188 | }
189 |
190 | }
191 |
--------------------------------------------------------------------------------
/frmConfigureSqlConn.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace NC.Util.SqlSrv.BackupRestore
2 | {
3 | partial class frmConfigureSqlConn
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.cboAvailableSQLServers = new System.Windows.Forms.ComboBox();
32 | this.cmdGetSqlServers = new System.Windows.Forms.Button();
33 | this.cboAuthentication = new System.Windows.Forms.ComboBox();
34 | this.lblAuthentication = new System.Windows.Forms.Label();
35 | this.txtLogin = new System.Windows.Forms.TextBox();
36 | this.lblLogin = new System.Windows.Forms.Label();
37 | this.lblPassword = new System.Windows.Forms.Label();
38 | this.txtPassword = new System.Windows.Forms.TextBox();
39 | this.cmdTestConnection = new System.Windows.Forms.Button();
40 | this.lblConnectionString = new System.Windows.Forms.Label();
41 | this.txtConnectionString = new System.Windows.Forms.TextBox();
42 | this.cmdOK = new System.Windows.Forms.Button();
43 | this.cmdCancel = new System.Windows.Forms.Button();
44 | this.SuspendLayout();
45 | //
46 | // cboAvailableSQLServers
47 | //
48 | this.cboAvailableSQLServers.FormattingEnabled = true;
49 | this.cboAvailableSQLServers.Location = new System.Drawing.Point(136, 25);
50 | this.cboAvailableSQLServers.Name = "cboAvailableSQLServers";
51 | this.cboAvailableSQLServers.Size = new System.Drawing.Size(131, 21);
52 | this.cboAvailableSQLServers.TabIndex = 0;
53 | //
54 | // cmdGetSqlServers
55 | //
56 | this.cmdGetSqlServers.Location = new System.Drawing.Point(27, 26);
57 | this.cmdGetSqlServers.Name = "cmdGetSqlServers";
58 | this.cmdGetSqlServers.Size = new System.Drawing.Size(104, 23);
59 | this.cmdGetSqlServers.TabIndex = 1;
60 | this.cmdGetSqlServers.Text = "Get SQL Servers";
61 | this.cmdGetSqlServers.UseVisualStyleBackColor = true;
62 | this.cmdGetSqlServers.Click += new System.EventHandler(this.cmdGetSqlServers_Click);
63 | //
64 | // cboAuthentication
65 | //
66 | this.cboAuthentication.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
67 | this.cboAuthentication.FormattingEnabled = true;
68 | this.cboAuthentication.Location = new System.Drawing.Point(136, 52);
69 | this.cboAuthentication.Name = "cboAuthentication";
70 | this.cboAuthentication.Size = new System.Drawing.Size(168, 21);
71 | this.cboAuthentication.TabIndex = 2;
72 | this.cboAuthentication.SelectionChangeCommitted += new System.EventHandler(this.cboAuthentication_SelectionChangeCommitted);
73 | //
74 | // lblAuthentication
75 | //
76 | this.lblAuthentication.AutoSize = true;
77 | this.lblAuthentication.Location = new System.Drawing.Point(47, 56);
78 | this.lblAuthentication.Name = "lblAuthentication";
79 | this.lblAuthentication.Size = new System.Drawing.Size(78, 13);
80 | this.lblAuthentication.TabIndex = 3;
81 | this.lblAuthentication.Text = "Authentication:";
82 | //
83 | // txtLogin
84 | //
85 | this.txtLogin.Enabled = false;
86 | this.txtLogin.Location = new System.Drawing.Point(136, 80);
87 | this.txtLogin.Name = "txtLogin";
88 | this.txtLogin.Size = new System.Drawing.Size(100, 20);
89 | this.txtLogin.TabIndex = 4;
90 | //
91 | // lblLogin
92 | //
93 | this.lblLogin.AutoSize = true;
94 | this.lblLogin.Location = new System.Drawing.Point(89, 83);
95 | this.lblLogin.Name = "lblLogin";
96 | this.lblLogin.Size = new System.Drawing.Size(36, 13);
97 | this.lblLogin.TabIndex = 5;
98 | this.lblLogin.Text = "Login:";
99 | //
100 | // lblPassword
101 | //
102 | this.lblPassword.AutoSize = true;
103 | this.lblPassword.Location = new System.Drawing.Point(69, 109);
104 | this.lblPassword.Name = "lblPassword";
105 | this.lblPassword.Size = new System.Drawing.Size(56, 13);
106 | this.lblPassword.TabIndex = 7;
107 | this.lblPassword.Text = "Password:";
108 | //
109 | // txtPassword
110 | //
111 | this.txtPassword.Enabled = false;
112 | this.txtPassword.Location = new System.Drawing.Point(136, 109);
113 | this.txtPassword.Name = "txtPassword";
114 | this.txtPassword.Size = new System.Drawing.Size(100, 20);
115 | this.txtPassword.TabIndex = 6;
116 | //
117 | // cmdTestConnection
118 | //
119 | this.cmdTestConnection.Location = new System.Drawing.Point(136, 135);
120 | this.cmdTestConnection.Name = "cmdTestConnection";
121 | this.cmdTestConnection.Size = new System.Drawing.Size(104, 23);
122 | this.cmdTestConnection.TabIndex = 8;
123 | this.cmdTestConnection.Text = "Test Connection";
124 | this.cmdTestConnection.UseVisualStyleBackColor = true;
125 | this.cmdTestConnection.Click += new System.EventHandler(this.cmdTestConnection_Click);
126 | //
127 | // lblConnectionString
128 | //
129 | this.lblConnectionString.AutoSize = true;
130 | this.lblConnectionString.Location = new System.Drawing.Point(57, 167);
131 | this.lblConnectionString.Name = "lblConnectionString";
132 | this.lblConnectionString.Size = new System.Drawing.Size(68, 13);
133 | this.lblConnectionString.TabIndex = 12;
134 | this.lblConnectionString.Text = "Conn. String:";
135 | //
136 | // txtConnectionString
137 | //
138 | this.txtConnectionString.Location = new System.Drawing.Point(136, 164);
139 | this.txtConnectionString.Name = "txtConnectionString";
140 | this.txtConnectionString.Size = new System.Drawing.Size(416, 20);
141 | this.txtConnectionString.TabIndex = 11;
142 | //
143 | // cmdOK
144 | //
145 | this.cmdOK.Location = new System.Drawing.Point(136, 202);
146 | this.cmdOK.Name = "cmdOK";
147 | this.cmdOK.Size = new System.Drawing.Size(80, 23);
148 | this.cmdOK.TabIndex = 13;
149 | this.cmdOK.Text = "Ok";
150 | this.cmdOK.UseVisualStyleBackColor = true;
151 | this.cmdOK.Click += new System.EventHandler(this.cmdOK_Click);
152 | //
153 | // cmdCancel
154 | //
155 | this.cmdCancel.Location = new System.Drawing.Point(222, 202);
156 | this.cmdCancel.Name = "cmdCancel";
157 | this.cmdCancel.Size = new System.Drawing.Size(80, 23);
158 | this.cmdCancel.TabIndex = 14;
159 | this.cmdCancel.Text = "Cancel";
160 | this.cmdCancel.UseVisualStyleBackColor = true;
161 | //
162 | // frmConfigureSqlConn
163 | //
164 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
165 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
166 | this.ClientSize = new System.Drawing.Size(564, 240);
167 | this.Controls.Add(this.cmdCancel);
168 | this.Controls.Add(this.cmdOK);
169 | this.Controls.Add(this.lblConnectionString);
170 | this.Controls.Add(this.txtConnectionString);
171 | this.Controls.Add(this.cmdTestConnection);
172 | this.Controls.Add(this.lblPassword);
173 | this.Controls.Add(this.txtPassword);
174 | this.Controls.Add(this.lblLogin);
175 | this.Controls.Add(this.txtLogin);
176 | this.Controls.Add(this.lblAuthentication);
177 | this.Controls.Add(this.cboAuthentication);
178 | this.Controls.Add(this.cmdGetSqlServers);
179 | this.Controls.Add(this.cboAvailableSQLServers);
180 | this.Name = "frmConfigureSqlConn";
181 | this.Text = "Configure SQL Server Connection";
182 | this.ResumeLayout(false);
183 | this.PerformLayout();
184 |
185 | }
186 |
187 | #endregion
188 |
189 | private System.Windows.Forms.ComboBox cboAvailableSQLServers;
190 | private System.Windows.Forms.Button cmdGetSqlServers;
191 | private System.Windows.Forms.ComboBox cboAuthentication;
192 | private System.Windows.Forms.Label lblAuthentication;
193 | private System.Windows.Forms.TextBox txtLogin;
194 | private System.Windows.Forms.Label lblLogin;
195 | private System.Windows.Forms.Label lblPassword;
196 | private System.Windows.Forms.TextBox txtPassword;
197 | private System.Windows.Forms.Button cmdTestConnection;
198 | private System.Windows.Forms.Label lblConnectionString;
199 | private System.Windows.Forms.TextBox txtConnectionString;
200 | private System.Windows.Forms.Button cmdOK;
201 | private System.Windows.Forms.Button cmdCancel;
202 | }
203 | }
--------------------------------------------------------------------------------
/AboutBox.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace NC.Util.SqlSrv.BackupRestore
2 | {
3 | partial class AboutBox
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | protected override void Dispose(bool disposing)
14 | {
15 | if (disposing && (components != null))
16 | {
17 | components.Dispose();
18 | }
19 | base.Dispose(disposing);
20 | }
21 |
22 | #region Windows Form Designer generated code
23 |
24 | ///
25 | /// Required method for Designer support - do not modify
26 | /// the contents of this method with the code editor.
27 | ///
28 | private void InitializeComponent()
29 | {
30 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox));
31 | this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
32 | this.logoPictureBox = new System.Windows.Forms.PictureBox();
33 | this.labelProductName = new System.Windows.Forms.Label();
34 | this.labelVersion = new System.Windows.Forms.Label();
35 | this.labelCopyright = new System.Windows.Forms.Label();
36 | this.labelCompanyName = new System.Windows.Forms.Label();
37 | this.textBoxDescription = new System.Windows.Forms.TextBox();
38 | this.okButton = new System.Windows.Forms.Button();
39 | this.tableLayoutPanel.SuspendLayout();
40 | ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit();
41 | this.SuspendLayout();
42 | //
43 | // tableLayoutPanel
44 | //
45 | this.tableLayoutPanel.ColumnCount = 2;
46 | this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F));
47 | this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F));
48 | this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0);
49 | this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0);
50 | this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1);
51 | this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2);
52 | this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3);
53 | this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4);
54 | this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5);
55 | this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
56 | this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9);
57 | this.tableLayoutPanel.Name = "tableLayoutPanel";
58 | this.tableLayoutPanel.RowCount = 6;
59 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
60 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
61 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
62 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
63 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
64 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
65 | this.tableLayoutPanel.Size = new System.Drawing.Size(417, 265);
66 | this.tableLayoutPanel.TabIndex = 0;
67 | //
68 | // logoPictureBox
69 | //
70 | this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
71 | this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image")));
72 | this.logoPictureBox.Location = new System.Drawing.Point(3, 3);
73 | this.logoPictureBox.Name = "logoPictureBox";
74 | this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6);
75 | this.logoPictureBox.Size = new System.Drawing.Size(131, 259);
76 | this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
77 | this.logoPictureBox.TabIndex = 12;
78 | this.logoPictureBox.TabStop = false;
79 | //
80 | // labelProductName
81 | //
82 | this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill;
83 | this.labelProductName.Location = new System.Drawing.Point(143, 0);
84 | this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
85 | this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17);
86 | this.labelProductName.Name = "labelProductName";
87 | this.labelProductName.Size = new System.Drawing.Size(271, 17);
88 | this.labelProductName.TabIndex = 19;
89 | this.labelProductName.Text = "Product Name";
90 | this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
91 | //
92 | // labelVersion
93 | //
94 | this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill;
95 | this.labelVersion.Location = new System.Drawing.Point(143, 26);
96 | this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
97 | this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17);
98 | this.labelVersion.Name = "labelVersion";
99 | this.labelVersion.Size = new System.Drawing.Size(271, 17);
100 | this.labelVersion.TabIndex = 0;
101 | this.labelVersion.Text = "Version";
102 | this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
103 | //
104 | // labelCopyright
105 | //
106 | this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill;
107 | this.labelCopyright.Location = new System.Drawing.Point(143, 52);
108 | this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
109 | this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17);
110 | this.labelCopyright.Name = "labelCopyright";
111 | this.labelCopyright.Size = new System.Drawing.Size(271, 17);
112 | this.labelCopyright.TabIndex = 21;
113 | this.labelCopyright.Text = "Copyright";
114 | this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
115 | //
116 | // labelCompanyName
117 | //
118 | this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill;
119 | this.labelCompanyName.Location = new System.Drawing.Point(143, 78);
120 | this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
121 | this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17);
122 | this.labelCompanyName.Name = "labelCompanyName";
123 | this.labelCompanyName.Size = new System.Drawing.Size(271, 17);
124 | this.labelCompanyName.TabIndex = 22;
125 | this.labelCompanyName.Text = "Company Name";
126 | this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
127 | //
128 | // textBoxDescription
129 | //
130 | this.textBoxDescription.AcceptsTab = true;
131 | this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill;
132 | this.textBoxDescription.Location = new System.Drawing.Point(143, 107);
133 | this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
134 | this.textBoxDescription.Multiline = true;
135 | this.textBoxDescription.Name = "textBoxDescription";
136 | this.textBoxDescription.ReadOnly = true;
137 | this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both;
138 | this.textBoxDescription.Size = new System.Drawing.Size(271, 126);
139 | this.textBoxDescription.TabIndex = 23;
140 | this.textBoxDescription.TabStop = false;
141 | this.textBoxDescription.Text = "Description";
142 | //
143 | // okButton
144 | //
145 | this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
146 | this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
147 | this.okButton.Location = new System.Drawing.Point(339, 239);
148 | this.okButton.Name = "okButton";
149 | this.okButton.Size = new System.Drawing.Size(75, 23);
150 | this.okButton.TabIndex = 24;
151 | this.okButton.Text = "&OK";
152 | //
153 | // AboutBox
154 | //
155 | this.AcceptButton = this.okButton;
156 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
157 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
158 | this.ClientSize = new System.Drawing.Size(435, 283);
159 | this.Controls.Add(this.tableLayoutPanel);
160 | this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
161 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
162 | this.MaximizeBox = false;
163 | this.MinimizeBox = false;
164 | this.Name = "AboutBox";
165 | this.Padding = new System.Windows.Forms.Padding(9);
166 | this.ShowIcon = false;
167 | this.ShowInTaskbar = false;
168 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
169 | this.Text = "AboutBox";
170 | this.tableLayoutPanel.ResumeLayout(false);
171 | this.tableLayoutPanel.PerformLayout();
172 | ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit();
173 | this.ResumeLayout(false);
174 |
175 | }
176 |
177 | #endregion
178 |
179 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;
180 | private System.Windows.Forms.PictureBox logoPictureBox;
181 | private System.Windows.Forms.Label labelProductName;
182 | private System.Windows.Forms.Label labelVersion;
183 | private System.Windows.Forms.Label labelCopyright;
184 | private System.Windows.Forms.Label labelCompanyName;
185 | private System.Windows.Forms.TextBox textBoxDescription;
186 | private System.Windows.Forms.Button okButton;
187 | }
188 | }
189 |
--------------------------------------------------------------------------------
/MainWin.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Windows.Forms;
6 | using System.Data.SqlClient;
7 | using Microsoft.SqlServer.Management.Smo;
8 | using Microsoft.SqlServer.Management.Common;
9 | using System.Collections.Specialized;
10 | using System.Diagnostics.CodeAnalysis;
11 | using System.Globalization;
12 | using System.IO;
13 | using System.IO.Compression;
14 | using System.Text;
15 | using System.Net;
16 | using System.Net.Mail;
17 |
18 |
19 | namespace NC.Util.SqlSrv.BackupRestore
20 | {
21 | [SuppressMessage("ReSharper", "FieldCanBeMadeReadOnly.Local")]
22 | [SuppressMessage("ReSharper", "RedundantDelegateCreation")]
23 | public partial class MainWin : Form
24 | {
25 | private string _dbName = string.Empty;
26 | private string _backupFileName = String.Empty;
27 | private SqlConnection _sqlConn;
28 | private Server _sqlServer;
29 | private string _dbFileLocation = String.Empty;
30 | private string _devFilesLocation = String.Empty;
31 | private string _developmentZips = string.Empty;
32 | private string _zipFileName = String.Empty;
33 | private string _databaseFileName = String.Empty;
34 | private string _databaseLogFileName = string.Empty;
35 | private string _messageBoxCaption = "SQL Backup and Restore Utility";
36 | private string _archiveFileName = String.Empty;
37 |
38 | // -----------------------------------------------------------------
39 | // If you use this app, change your encryption key to something else
40 | // -----------------------------------------------------------------
41 | private string _encryptionKey = "LazyDog";
42 |
43 | private Dictionary _configurationSettings = new Dictionary();
44 | private string _settingsFileName = Environment.CurrentDirectory + @"\ConfigurationSettings.sbu";
45 |
46 | public MainWin()
47 | {
48 |
49 | InitializeComponent();
50 | openBakFile.InitialDirectory = Application.StartupPath;
51 | saveBakFile.InitialDirectory = Application.StartupPath;
52 | try
53 | {
54 | InitializeConfigurationSettings();
55 | ReadConfigurationSettings();
56 | _configurationSettings.TryGetValue("ConfigurationSettings", out string connectionString);
57 | _sqlConn = new SqlConnection(connectionString);
58 | _sqlServer = new Server(new ServerConnection(_sqlConn));
59 | PopulateGridWithDatabasesToBeBackedUp();
60 | GenerateApplicationFileNames(_dbName);
61 | LoadDevelopmentDirectories();
62 | }
63 | catch (Exception exc)
64 | {
65 | MessageBox.Show($@"Exception occured. Message: {exc.Message}", _messageBoxCaption);
66 | Logger.LogMessage($@"Exception occured. Message: {exc.Message}");
67 | }
68 | }
69 |
70 |
71 | public void PopulateGridWithDatabasesToBeBackedUp()
72 | {
73 | if (_sqlServer.Databases.Count > 0)
74 | {
75 | dgvDatabases.Rows.Clear();
76 |
77 | foreach (Database db in _sqlServer.Databases)
78 | {
79 | if (db.Name == "master" || db.Name == "tempdb" || db.Name == "model" || db.Name == "msdb")
80 | {
81 | // Do not display system databases //
82 | }
83 | else
84 | {
85 | dgvDatabases.Rows.Add(0, db.Name, GenerateDBBackupFileName(db.Name) + ".zip");
86 | }
87 | }
88 | }
89 | }
90 |
91 | // ---------------
92 | // CTB: 2019/10/29
93 | // ------------------------------------------------------------------
94 | // Sometimes the program might leave a stray file in the scratch pad.
95 | // Makes sure the scratch pad is free of files so we don't have file
96 | // collision during this new running of the program
97 | // ------------------------------------------------------------------
98 | private void CleanUpScratchPadBakFiles()
99 | {
100 | if (Directory.Exists(txtScratchPad.Text))
101 | {
102 | string[] files = Directory.GetFiles(txtScratchPad.Text);
103 | foreach (string file in files)
104 | {
105 | // --------------
106 | // CTB 2019:10:31
107 | //----------------------------------------------------------
108 | // WARNING: this method deletes ALL of the files in the
109 | // specified folder. We MUST filter to erase
110 | // ONLY .bak files or we'll empty a folder
111 | // of any files in it ... think of what would happen
112 | // if the user selected C:\Temp ... yikes.
113 | // ----------------------------------------------------------
114 | if (file.Contains(".bak"))
115 | {
116 | File.Delete(file);
117 | }
118 | }
119 | }
120 | }
121 |
122 | private void saveBakFile_FileOk(object sender, CancelEventArgs e)
123 | {
124 | }
125 |
126 | private void openBakFile_FileOk(object sender, CancelEventArgs e)
127 | {
128 | txtFileToRestore.Text = openBakFile.FileName;
129 | }
130 |
131 | private void btnBackupDb_Click(object sender, EventArgs e)
132 | {
133 | for (int i = 0; i < dgvDatabases.Rows.Count; i++)
134 | {
135 | DataGridViewRow row = dgvDatabases.Rows[i];
136 | string value = row.Cells["colDBSelected"].Value.ToString();
137 |
138 | if (value == "true")
139 | {
140 |
141 | string databaseName = (string)(dgvDatabases.Rows[i].Cells["colDBName"].Value);
142 | _dbName = databaseName;
143 | string dbDevice = (string) (dgvDatabases.Rows[i].Cells["colDBBackupZipName"].Value);
144 | dbDevice = dbDevice.Replace("zip", "bak");
145 |
146 | BackupDb(databaseName, dbDevice);
147 |
148 | CompressDbBackupFile(txtBackupZips.Text + (string)(dgvDatabases.Rows[i].Cells["colDBBackupZipName"].Value), dbDevice);
149 | }
150 | }
151 | }
152 |
153 | private void ShrinkDatabaseLogFile(string dbName)
154 | {
155 | string shortLogFileName = dbName + "_log";
156 |
157 | string sqlCommand = "USE " + dbName;
158 | sqlCommand += " ALTER DATABASE " + dbName;
159 | sqlCommand += " SET RECOVERY SIMPLE";
160 | sqlCommand += " DBCC SHRINKFILE (" + shortLogFileName + ", 1)";
161 | sqlCommand += " ALTER DATABASE " + dbName;
162 | sqlCommand += " SET RECOVERY FULL";
163 | Logger.LogMessage("Shrink Log File Script: " + sqlCommand);
164 | txtBackupScript.Text = sqlCommand;
165 |
166 | try
167 | {
168 | using (SqlCommand command = new SqlCommand(sqlCommand, _sqlConn))
169 | {
170 | command.ExecuteNonQuery();
171 | }
172 | MessageBox.Show(@"Shrink Log File succeeded!!!", _messageBoxCaption);
173 | Logger.LogMessage(@"Shrink Log File succeeded!!!");
174 | Logger.LogMessage("----------");
175 | }
176 | catch (Exception e)
177 | {
178 | MessageBox.Show(@"Shrink database log file failed, please see log file for details ...", _messageBoxCaption);
179 | Logger.LogMessage(@"ShrinkDatabaseLogFile() failed: " + e);
180 | Logger.LogMessage(@"----------");
181 |
182 | MessageBox.Show(e.ToString(), _messageBoxCaption);
183 | }
184 | }
185 |
186 | private void ExtractBackupFile(string zipFile)
187 | {
188 | _backupFileName = zipFile.Replace(txtBackupZips.Text, txtScratchPad.Text);
189 | _backupFileName = _backupFileName.Replace(".zip", ".bak");
190 |
191 | // ----------------
192 | // CTB: 2019/10/28:
193 | // ----------------------------------------------------------
194 | // Used only to display the name of the .bak file to the user
195 | // ----------------------------------------------------------
196 | txtFileToRestore.Text = _backupFileName;
197 |
198 | if (File.Exists(_backupFileName))
199 | {
200 | File.Delete(_backupFileName);
201 | }
202 |
203 | ZipFile.ExtractToDirectory(zipFile, txtScratchPad.Text);
204 | }
205 |
206 | private void CompressDbBackupFile(string dbDBBAckupZipFile, string dbBackupFile)
207 | {
208 | // ---------------
209 | // CTB: 2019/10/28
210 | // -------------------------------------------------------
211 | // Zip files are named by HH:MM:SS ... if the user presses
212 | // the backup button more than once in a minute, erase
213 | // the existing .zip file and recreate it
214 | // -------------------------------------------------------
215 | if (File.Exists(dbDBBAckupZipFile))
216 | {
217 | File.Delete(dbDBBAckupZipFile);
218 | }
219 |
220 | // ---------------
221 | // CTB: 2019/10/27
222 | // ----------------------------------------------------
223 | // ZipFile only allows backing up of ALL the files in
224 | // a specified directory, therefore, use a scratch pad
225 | // directory where the .bak file is initially created,
226 | // perform the compression and then erase the .BAK file
227 | // ----------------------------------------------------
228 | ZipFile.CreateFromDirectory(txtScratchPad.Text, dbDBBAckupZipFile);
229 | File.Delete(dbBackupFile);
230 | }
231 |
232 | private void BackupDb(string dbName, string fileToBackupTo)
233 | {
234 | Backup dbBackup = new Backup();
235 |
236 | try
237 | {
238 | fileToBackupTo = txtScratchPad.Text + fileToBackupTo;
239 |
240 | dbBackup.Action = BackupActionType.Database;
241 | dbBackup.Database = dbName;
242 | dbBackup.BackupSetName = $"{_dbName} backup set.";
243 | dbBackup.BackupSetDescription = $"Database: {dbName}:Date: {DateTime.Now:dd.MM.yyyy hh:mm}.";
244 | dbBackup.MediaDescription = "Disk";
245 |
246 | BackupDeviceItem device = new BackupDeviceItem(fileToBackupTo, DeviceType.File);
247 | dbBackup.Devices.Add(device);
248 |
249 | txtBackupScript.Text = dbBackup.Script(_sqlServer);
250 | Logger.LogMessage("SQL Backup Script: " + txtBackupScript.Text);
251 | progBar.Visible = true;
252 | progBar.Value = 0;
253 |
254 | dbBackup.Complete += dbBackup_Complete;
255 | dbBackup.PercentCompleteNotification = 10;
256 | dbBackup.PercentComplete += PercentComplete;
257 | // ----------------------------
258 | dbBackup.SqlBackup(_sqlServer);
259 | // ----------------------------
260 | }
261 | catch (Exception exc)
262 | {
263 | dbBackup.Abort();
264 | Logger.LogMessage($@"Exception occured. Message: {exc.Message}");
265 | }
266 |
267 | progBar.Visible = false;
268 | }
269 |
270 | void dbBackup_Complete(object sender, ServerMessageEventArgs e)
271 | {
272 | MessageBox.Show(@"Backup of database " + _dbName + " is complete!!!", _messageBoxCaption);
273 | Logger.LogMessage($@"Backup complete!!!");
274 | Logger.LogMessage("----------");
275 |
276 | }
277 |
278 | private void btnRestore_Click(object sender, EventArgs e)
279 | {
280 | if (string.IsNullOrEmpty(_backupFileName))
281 | {
282 | MessageBox.Show(@"Please select a .zip file first", _messageBoxCaption);
283 | }
284 | else
285 | {
286 | if (File.Exists(_backupFileName))
287 | {
288 | RestoreDb();
289 | }
290 | else
291 | {
292 | MessageBox.Show(@"The .zip file you specified does not exist!!!", _messageBoxCaption);
293 | Logger.LogMessage("The .zip file you specified does not exist." );
294 | }
295 | }
296 |
297 | btnRestore.Enabled = false;
298 | txtFileToRestore.Text = String.Empty;
299 | }
300 |
301 |
302 |
303 | private void RestoreDb()
304 | {
305 | string[] dbNameFragments = _backupFileName.Split('_');
306 | string _dbName = dbNameFragments[0].Replace(txtScratchPad.Text, "");
307 |
308 | Restore dbRestore = new Restore();
309 | dbRestore.Database = _dbName;
310 | dbRestore.Action = RestoreActionType.Database;
311 | dbRestore.ReplaceDatabase = true;
312 |
313 | try
314 | {
315 | BackupDeviceItem device = new BackupDeviceItem(_backupFileName, DeviceType.File);
316 | dbRestore.Devices.Add(device);
317 | DataTable dtFiles = dbRestore.ReadFileList(_sqlServer);
318 | string backupDbLogicalName = dtFiles.Rows[0]["LogicalName"].ToString();
319 |
320 | RelocateFile dbRf = new RelocateFile(backupDbLogicalName, _databaseFileName);
321 | RelocateFile logRf = new RelocateFile($"{backupDbLogicalName}_log", _databaseLogFileName);
322 | dbRestore.RelocateFiles.Add(dbRf);
323 | dbRestore.RelocateFiles.Add(logRf);
324 |
325 | if (!logRf.PhysicalFileName.Contains(@"C:\"))
326 | {
327 | logRf.PhysicalFileName = _dbFileLocation + _databaseLogFileName;
328 | }
329 |
330 | Logger.LogMessage("Physical Log File: " + logRf.PhysicalFileName);
331 | Logger.LogMessage("Physical DB File: " + dbRf.PhysicalFileName);
332 |
333 |
334 | string sql = string.Empty;
335 | StringCollection scriptColl = dbRestore.Script(_sqlServer);
336 | foreach (string str in scriptColl)
337 | {
338 | sql += str;
339 | }
340 |
341 | sql = "USE master ALTER DATABASE " + _dbName + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE " + sql;
342 | sql += " ALTER DATABASE " + _dbName + " SET MULTI_USER ";
343 |
344 | txtRestoreScript.Text = sql;
345 | Logger.LogMessage("SQL Restore Script: " + sql);
346 | progBar.Visible = true;
347 | progBar.Value = 0;
348 |
349 | dbRestore.Complete += new ServerMessageEventHandler(dbRestore_Complete);
350 | dbRestore.PercentComplete += new PercentCompleteEventHandler(PercentComplete);
351 | dbRestore.SqlRestore(_sqlServer);
352 | }
353 | catch (Exception exc)
354 | {
355 | dbRestore.Abort();
356 | Logger.LogMessage($"RestoreDb(): Exception occured. Message: {exc.Message}");
357 | MessageBox.Show(@"RestoreDb(): Exception occured. Message:" + exc.Message, _messageBoxCaption);
358 | }
359 | finally
360 | {
361 | if (File.Exists(_backupFileName))
362 | {
363 | File.Delete(_backupFileName);
364 | }
365 | }
366 |
367 | progBar.Visible = false;
368 | }
369 |
370 | void PercentComplete(object sender, PercentCompleteEventArgs e)
371 | {
372 | if (progBar.Value < progBar.Maximum)
373 | {
374 | if ((progBar.Value + e.Percent) <= 100)
375 | {
376 | progBar.Value += e.Percent;
377 | }
378 | else
379 | progBar.Value = 100;
380 | }
381 | }
382 |
383 | void dbRestore_Complete(object sender, ServerMessageEventArgs e)
384 | {
385 | MessageBox.Show(@"Restore complete", _messageBoxCaption);
386 | Logger.LogMessage(@"Restore complete ... no errors.");
387 | Logger.LogMessage(@"----------");
388 |
389 | }
390 |
391 | private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
392 | {
393 | AboutBox about = new AboutBox();
394 | about.ShowDialog();
395 | }
396 |
397 | private void quitToolStripMenuItem_Click(object sender, EventArgs e)
398 | {
399 | Application.Exit();
400 | }
401 |
402 | private string GenerateDBBackupFileName(string dbName)
403 | {
404 | string dbBackupFileName = string.Format("{6}DB_{0}{1}{2}_{3}{4}{5}",
405 | DateTime.Now.Year.ToString().PadLeft(4, '0'),
406 | DateTime.Now.Month.ToString().PadLeft(2, '0'),
407 | DateTime.Now.Day.ToString().PadLeft(2, '0'),
408 | DateTime.Now.Hour.ToString().PadLeft(2, '0'),
409 | DateTime.Now.Minute.ToString().PadLeft(2, '0'),
410 | DateTime.Now.Second.ToString().PadLeft(2, '0'),
411 | dbName);
412 | return dbBackupFileName;
413 | }
414 |
415 | private void GenerateApplicationFileNames(string dbName)
416 | {
417 | string baseFileName = GenerateDBBackupFileName(dbName);
418 |
419 | bool validDirectoryStructures = true;
420 |
421 | if (!Directory.Exists(txtBackupZips.Text))
422 | {
423 | Logger.LogMessage("The backup destination directory " + txtBackupZips.Text + " does not exist.");
424 | validDirectoryStructures = false;
425 | }
426 |
427 | if (!Directory.Exists(txtScratchPad.Text))
428 | {
429 | Logger.LogMessage("The scratch pad directory " + txtScratchPad.Text + " does not exist.");
430 | validDirectoryStructures = false;
431 | }
432 |
433 | if (!Directory.Exists(txtScratchPad.Text))
434 | {
435 | Logger.LogMessage("The database file directory " + _dbFileLocation + " does not exist.");
436 | validDirectoryStructures = false;
437 | }
438 |
439 | if (!validDirectoryStructures)
440 | {
441 | cmdShrinkLogFile.Enabled = false;
442 | btnBackupDb.Enabled = false;
443 | btnRestore.Enabled = false;
444 | cmdGetZipFile.Enabled = false;
445 |
446 | MessageBox.Show(
447 | @"The directory structures for the application are invlid. Please see log file for details. Make the changes, recompile then redeploy the application.", _messageBoxCaption);
448 | Logger.LogMessage("----------");
449 |
450 | }
451 |
452 | _backupFileName = txtScratchPad.Text + baseFileName + ".bak";
453 | _zipFileName = txtBackupZips.Text + baseFileName + ".zip";
454 | _databaseFileName = _dbFileLocation + dbName + ".mdf";
455 | _databaseLogFileName = _dbFileLocation + dbName + "_Log.ldf";
456 |
457 | Logger.LogMessage("Backup File Name: " + _backupFileName);
458 | Logger.LogMessage("Zip File Name: " + _zipFileName);
459 | Logger.LogMessage("Database File Name: " + _databaseFileName);
460 | Logger.LogMessage("Database Log File Name: " + _databaseLogFileName);
461 | Logger.LogMessage("----------");
462 | }
463 |
464 | private void MainWin_FormClosing(object sender, FormClosingEventArgs e)
465 | {
466 | if (_sqlConn != null)
467 | {
468 | if (_sqlConn.State == ConnectionState.Open)
469 | {
470 | _sqlConn.Close();
471 | }
472 | _sqlConn.Dispose();
473 | CleanUpScratchPadBakFiles();
474 | }
475 | }
476 |
477 | private void cmdGetZipFile_Click(object sender, EventArgs e)
478 | {
479 | ofdRestoreZips.InitialDirectory = txtBackupZips.Text;
480 | ofdRestoreZips.RestoreDirectory = true;
481 | ofdRestoreZips.Title = "Select a .zip file containg the .bak file of the DB to restore";
482 | ofdRestoreZips.ValidateNames = true;
483 | ofdRestoreZips.AddExtension = true;
484 | ofdRestoreZips.Filter = "zip files (*.zip)|";
485 | ofdRestoreZips.ShowHelp = false;
486 | ofdRestoreZips.FileName = "";
487 |
488 | DialogResult result = ofdRestoreZips.ShowDialog();
489 | if (string.IsNullOrEmpty(ofdRestoreZips.FileName))
490 | {
491 | MessageBox.Show(@"Please select a .zip file first!!!", _messageBoxCaption);
492 | }
493 | else
494 | {
495 | if (result == DialogResult.OK)
496 | {
497 | if (RestoreWarning(ofdRestoreZips.FileName))
498 | {
499 | ExtractBackupFile(ofdRestoreZips.FileName);
500 | }
501 | }
502 | }
503 |
504 | btnRestore.Enabled = true;
505 | }
506 |
507 | private bool RestoreWarning(string fileName)
508 | {
509 | bool isOk =false;
510 | int fileAge = DateTime.Now.Subtract(File.GetCreationTime(fileName)).Hours;
511 | string message = String.Empty;
512 | if (fileAge <= 1)
513 | {
514 | message = @"The backup .zip file you selected is approximately one hour old. If you restore from this file you will lose at the very least one hour of transactions. Press OK if you are sure you want to restore from this file.";
515 | if (MessageBox.Show(message,
516 | @"!!! CAUTION !!! " + _messageBoxCaption,
517 | MessageBoxButtons.OKCancel,
518 | MessageBoxIcon.Exclamation) == DialogResult.OK )
519 | {
520 | isOk = true;
521 | }
522 | }
523 | else
524 | {
525 | message = @"The backup .zip file you selected is " + fileAge.ToString() +
526 | " hours old. You will lose at the very least that many hours of transactions if you restore from this file. Press OK if you are ABSOLUTELY sure you want to restore from this file.";
527 | if (MessageBox.Show(message,
528 | @"!!! WARNING !!! " + _messageBoxCaption,
529 | MessageBoxButtons.OKCancel,
530 | MessageBoxIcon.Warning) == DialogResult.OK)
531 | {
532 | isOk = true;
533 | }
534 |
535 | }
536 |
537 | return isOk;
538 | }
539 |
540 | private void cmdShrinkLogFile_Click(object sender, EventArgs e)
541 | {
542 |
543 | for (int i = 0; i < dgvDatabases.Rows.Count; i++)
544 | {
545 | DataGridViewRow row = dgvDatabases.Rows[i];
546 | string value = row.Cells["colDBSelected"].Value.ToString();
547 |
548 | if (value == "true")
549 | {
550 | string databaseName = (string)(dgvDatabases.Rows[i].Cells["colDBName"].Value);
551 | ShrinkDatabaseLogFile(databaseName);
552 | }
553 | }
554 |
555 | }
556 |
557 | private void cmdShow_Click(object sender, EventArgs e)
558 | {
559 | ShowLogFile();
560 | }
561 |
562 | private void ShowLogFile()
563 | {
564 | string logFileName = Environment.CurrentDirectory + @"\LogFile.txt";
565 | string logFileContents = string.Empty;
566 | if (File.Exists(logFileName))
567 | {
568 | string[] contents = File.ReadAllLines(logFileName);
569 | foreach (string line in contents)
570 | {
571 | logFileContents += (line + Environment.NewLine);
572 | }
573 | txtLogFile.Text = logFileContents;
574 | }
575 | }
576 |
577 | private void cmdClear_Click(object sender, EventArgs e)
578 | {
579 | string logFileName = Environment.CurrentDirectory + @"\LogFile.txt";
580 |
581 | if (File.Exists(logFileName))
582 | {
583 | // ----------------------------------------------
584 | // Recreate the log file by simply overwriting it
585 | // ----------------------------------------------
586 | File.Create(logFileName);
587 | txtLogFile.Text = String.Empty;
588 | }
589 | }
590 |
591 | private void cmdViewInNotepad_Click(object sender, EventArgs e)
592 | {
593 | CommandLineHelper.LaunchNotepadToViewLogFile();
594 | }
595 |
596 | private void SaveConfigurationSettings()
597 | {
598 | _configurationSettings.Clear();
599 | _configurationSettings.Add("BackupZips", txtBackupZips.Text);
600 | _configurationSettings.Add("ScratchPad", txtScratchPad.Text);
601 | _configurationSettings.Add("DbFileLocations", txtSQLFileLocations.Text);
602 | _configurationSettings.Add("DevFilesLocation", txtDevFilesLocation.Text);
603 | _configurationSettings.Add("DevelopmentDirectory", txtDevelopmentZips.Text);
604 | _configurationSettings.Add("ConnectionString", txtConnectionString.Text);
605 | _configurationSettings.Add("SourceBackupSkipDLLs", (chkSkipDLLS.Checked)?"false": "true");
606 | _configurationSettings.Add("LocalRetentionMonths", nudMonths.Value.ToString(CultureInfo.InvariantCulture));
607 | _configurationSettings.Add("LocalRetentionDays", nudDays.Value.ToString(CultureInfo.InvariantCulture));
608 |
609 | _configurationSettings.Add("EmailUseEmailSettings", (chkConfigureEmails.Checked) ? "true" : "false");
610 | _configurationSettings.Add("EmailFromEmail", txtFromEmail.Text);
611 | _configurationSettings.Add("EmailSuccessEmail", txtSuccessEmail.Text);
612 | _configurationSettings.Add("EmailFailureEmail", txtFailureEmail.Text);
613 | _configurationSettings.Add("EmailSMTPOutgoingServer", txtSMTPServer.Text);
614 | _configurationSettings.Add("EmailOutgoingPortNumber", nudEmailOutgoingPortNumber.Value.ToString(CultureInfo.InvariantCulture));
615 | _configurationSettings.Add("EmailLoginUserName", txtEmailLoginUserName.Text);
616 | _configurationSettings.Add("EmailLoginUserPassword", txtEmailLoginUserPassword.Text);
617 | _configurationSettings.Add("EmailRequiresSSL", (chkServerRequiresAuth.Checked) ? "true" : "false");
618 | _configurationSettings.Add("EmailEnableSSL", (chkEnableSSL.Checked) ? "true" : "false");
619 |
620 | _configurationSettings.Add("FTPUseFTPSettings", (chkFTPUseFTPSettings.Checked) ? "true" : "false");
621 | _configurationSettings.Add("FTPRetentionMonths", nudFTPMonths.Value.ToString(CultureInfo.InvariantCulture));
622 | _configurationSettings.Add("FTPRetentionDays", nudFTPDays.Value.ToString(CultureInfo.InvariantCulture));
623 | _configurationSettings.Add("FTPHostAddress", txtFTPHostAddress.Text);
624 | _configurationSettings.Add("FTPUserName", txtFTPUserName.Text);
625 | _configurationSettings.Add("FTPPassword", txtFTPPassword.Text);
626 | _configurationSettings.Add("FTPPort", nudFTPPort.Value.ToString(CultureInfo.InvariantCulture));
627 | _configurationSettings.Add("FTPDataConnection", "Passive(PASV)");
628 | _configurationSettings.Add("FTPRemoteFolder", txtFTPRemoteFolder.Text);
629 | _configurationSettings.Add("FTPWriteSessionToLog", (chkFTPWriteSessionLog.Checked) ? "true" : "false");
630 |
631 | if (File.Exists(_settingsFileName))
632 | {
633 | File.Delete((_settingsFileName));
634 | }
635 |
636 | FileStream fs = new FileStream(_settingsFileName, FileMode.Append);
637 |
638 | foreach (KeyValuePair setting in _configurationSettings)
639 | {
640 | // -------------------------------------------------------
641 | // This time let's encrypt only the data, delimit with a :
642 | // -------------------------------------------------------
643 | string encryptedConfigLine = setting.Key + ":" + CryptographyCBC.EncryptString(setting.Value, _encryptionKey) +
644 | Environment.NewLine;
645 | byte[] bConfigLine = Encoding.Default.GetBytes(encryptedConfigLine);
646 | fs.Write(bConfigLine, 0, bConfigLine.Length);
647 | }
648 | fs.Close();
649 | }
650 |
651 | private void ReadConfigurationSettings()
652 | {
653 | if (File.Exists(_settingsFileName))
654 | {
655 | _configurationSettings.Clear();
656 | string[] configurationLines = File.ReadAllLines(_settingsFileName);
657 | string configLine = String.Empty;
658 | string[] splitKeyValue;
659 |
660 | string splitValue;
661 | string decryptedValue;
662 | string decryptedKey;
663 |
664 |
665 | foreach (string configSettingPair in configurationLines)
666 | {
667 | splitKeyValue = configSettingPair.Split(':');
668 | decryptedKey = splitKeyValue[0];
669 |
670 | splitValue = splitKeyValue[1]; // this is still encrypted
671 | decryptedValue = CryptographyCBC.DecryptString(splitValue, _encryptionKey);
672 |
673 | _configurationSettings.Add(decryptedKey, decryptedValue);
674 | }
675 |
676 | _configurationSettings.TryGetValue("BackupZips", out string backupZipDirectory);
677 | txtBackupZips.Text = backupZipDirectory;
678 |
679 | _configurationSettings.TryGetValue("ScratchPad", out string scratchPadDirectory);
680 | txtScratchPad.Text = scratchPadDirectory;
681 |
682 | _configurationSettings.TryGetValue("DbFileLocations", out string dbFileDirectory);
683 | txtSQLFileLocations.Text = dbFileDirectory;
684 |
685 | _configurationSettings.TryGetValue("DevFilesLocation", out string devFileLocation);
686 | txtDevFilesLocation.Text = devFileLocation;
687 |
688 | _configurationSettings.TryGetValue("DevelopmentDirectory", out string developmentDirectory);
689 | txtDevelopmentZips.Text = developmentDirectory;
690 |
691 | _configurationSettings.TryGetValue("ConnectionString", out string connectionString);
692 | txtConnectionString.Text = connectionString;
693 |
694 | _configurationSettings.TryGetValue("SourceBackupSkipDLLs", out string SourceBackupSkipDLLs);
695 | chkSkipDLLS.Checked = Convert.ToBoolean(SourceBackupSkipDLLs == "true");
696 |
697 | _configurationSettings.TryGetValue("LocalRetentionMonths", out string months);
698 | nudMonths.Value = Convert.ToInt32(months);
699 |
700 | _configurationSettings.TryGetValue("LocalRetentionDays", out string days);
701 | nudDays.Value = Convert.ToInt32(days);
702 |
703 | _configurationSettings.TryGetValue("EmailSuccessEmail", out string successfulEmail);
704 | txtSuccessEmail.Text = successfulEmail;
705 |
706 | _configurationSettings.TryGetValue("EmailFailureEmail", out string failureEmail);
707 | txtFailureEmail.Text = failureEmail;
708 |
709 | _configurationSettings.TryGetValue("EmailUseEmailSettings", out string useEMailSettigns);
710 | chkConfigureEmails.Checked = Convert.ToBoolean(useEMailSettigns == "true");
711 |
712 | _configurationSettings.TryGetValue("EmailFromEmail", out string emailFromEmail);
713 | txtFromEmail.Text = emailFromEmail;
714 |
715 | _configurationSettings.TryGetValue("EmailSMTPOutgoingServer", out string smtpOutgoingServer);
716 | txtSMTPServer.Text = smtpOutgoingServer;
717 |
718 | _configurationSettings.TryGetValue("EmailSMTPPort", out string emailSmtpPort);
719 | nudFTPPort.Value = Convert.ToInt32(emailSmtpPort);
720 |
721 | _configurationSettings.TryGetValue("EmailRequiresSSL", out string emailRequiresSsl);
722 | chkServerRequiresAuth.Checked = Convert.ToBoolean(emailRequiresSsl == "true");
723 |
724 | _configurationSettings.TryGetValue("EmailEnableSSL", out string emailEnableSsl);
725 | chkEnableSSL.Checked = Convert.ToBoolean(emailEnableSsl == "true");
726 |
727 | _configurationSettings.TryGetValue("EmailLoginUserName", out string emailLoginUserName);
728 | txtEmailLoginUserName.Text = emailLoginUserName;
729 |
730 | _configurationSettings.TryGetValue("EmailLoginUserPassword", out string emailLoginUserPassword);
731 | txtEmailLoginUserPassword.Text = emailLoginUserPassword;
732 |
733 | _configurationSettings.TryGetValue("EmailOutgoingPortNumber", out string emailOutgoingPortNumber);
734 | nudEmailOutgoingPortNumber.Value = Convert.ToInt32(emailOutgoingPortNumber);
735 |
736 | _configurationSettings.TryGetValue("FTPUseFTPSettings", out string ftpUseFtpSettings);
737 | chkFTPUseFTPSettings.Checked = Convert.ToBoolean(ftpUseFtpSettings == "true");
738 |
739 | _configurationSettings.TryGetValue("FTPRetentionMonths", out string ftpRetentionMonths);
740 | nudFTPMonths.Value = Convert.ToInt32(ftpRetentionMonths);
741 |
742 | _configurationSettings.TryGetValue("FTPRetentionDays", out string ftpRetentionDays);
743 | nudFTPDays.Value = Convert.ToInt32(ftpRetentionDays);
744 |
745 | _configurationSettings.TryGetValue("FTPHostAddress", out string ftpHostAddress);
746 | txtFTPHostAddress.Text = ftpHostAddress;
747 |
748 | _configurationSettings.TryGetValue("FTPUserName", out string ftpUserName);
749 | txtFTPUserName.Text = ftpUserName;
750 |
751 | _configurationSettings.TryGetValue("FTPPassword", out string ftpPassword);
752 | txtFTPPassword.Text = ftpPassword;
753 |
754 | _configurationSettings.TryGetValue("FTPPort", out string ftpPort);
755 | nudFTPPort.Value = Convert.ToInt32(ftpPort);
756 |
757 | _configurationSettings.TryGetValue("FTPRemoteFolder",out string ftpRemoteFolder);
758 | txtFTPRemoteFolder.Text = ftpRemoteFolder;
759 |
760 | _configurationSettings.TryGetValue("EmailEnableSSL", out string ftpWriteSessionToLog);
761 | chkFTPWriteSessionLog.Checked = Convert.ToBoolean(ftpWriteSessionToLog == "true");
762 | }
763 | }
764 |
765 | private void InitializeConfigurationSettings()
766 | {
767 |
768 | if (!File.Exists(_settingsFileName))
769 | {
770 | _configurationSettings.Add("BackupZips", @"C:\NovantBackups\SQLBackups\");
771 | _configurationSettings.Add("ScratchPad", @"C:\NovantBackups\Scratch\");
772 | _configurationSettings.Add("DbFileLocations", @"C:\Program Files\Microsoft SQL Server\MSSQL13.SQLSVR_2016\MSSQL\DATA\");
773 | _configurationSettings.Add("DevFilesLocation",@"E:\Development\");
774 | _configurationSettings.Add("DevelopmentZips",@"I:\NovantBackups\");
775 | _configurationSettings.Add("ConnectionString", "Server=CTB-MAXIMUS-PC;Database=master;Trusted_Connection=True");
776 | _configurationSettings.Add("SourceBackupSkipDLLs","true");
777 | _configurationSettings.Add("LocalRetentionMonths", "6");
778 | _configurationSettings.Add("LocalRetentionDays", "0");
779 |
780 | _configurationSettings.Add("EmailUseEmailSettings", "false");
781 | _configurationSettings.Add("EmailFromEmail", "no-reply@novantconsulting.com");
782 | _configurationSettings.Add("EmailSuccessEmail", "ct@novantconsulting.com");
783 | _configurationSettings.Add("EmailFailureEmail", "ct@novantconsulting.com");
784 | _configurationSettings.Add("EmailSMTPOutgoingServer", "smtpout.secureserver.net");
785 | _configurationSettings.Add("EmailOutgoingPortNumber", "25");
786 | _configurationSettings.Add("EmailLoginUserName", "ct@novantconsulting.com");
787 | _configurationSettings.Add("EmailLoginUserPassword", "YouDontGetToSeeThis");
788 | _configurationSettings.Add("EmailRequiresSSL", "true");
789 | _configurationSettings.Add("EmailEnableSSL", "true");
790 |
791 | _configurationSettings.Add("FTPUseFTPSettings", "false");
792 | _configurationSettings.Add("FTPRetentionMonths", "6");
793 | _configurationSettings.Add("FTPRetentionDays", "0");
794 | _configurationSettings.Add("FTPHostAddress", @"ftp://50.62.160.129");
795 | _configurationSettings.Add("FTPUserName", "CTBlankenship75");
796 | _configurationSettings.Add("FTPPassword", "YouDontGetToSeeThis");
797 | _configurationSettings.Add("FTPPort", "21");
798 | _configurationSettings.Add("FTPDataConnection", "Passive(PASV)");
799 | _configurationSettings.Add("FTPRemoteFolder", @"ftp://50.62.160.129/SQLBackups");
800 | _configurationSettings.Add("FTPWriteSessionToLog", "true");
801 |
802 | FileStream fs = new FileStream(_settingsFileName, FileMode.Append);
803 |
804 | foreach (KeyValuePair setting in _configurationSettings)
805 | {
806 |
807 | // -------------------------------------------------------
808 | // This time let's encrypt only the data, delimit with a :
809 | // -------------------------------------------------------
810 | string encryptedConfigLine = setting.Key + ":" + CryptographyCBC.EncryptString(setting.Value, _encryptionKey) +
811 | Environment.NewLine;
812 | byte[] bConfigLine = Encoding.Default.GetBytes(encryptedConfigLine);
813 | fs.Write(bConfigLine, 0, bConfigLine.Length);
814 | }
815 | fs.Close();
816 | }
817 | }
818 |
819 | private void cmdBackupZips_Click(object sender, EventArgs e)
820 | {
821 | fbdBackupZips.SelectedPath = txtBackupZips.Text;
822 | fbdBackupZips.ShowNewFolderButton = true;
823 | fbdBackupZips.Description = "Select a path to store the backup .zip files";
824 | if (fbdBackupZips.ShowDialog() == DialogResult.OK)
825 | {
826 | txtBackupZips.Text = fbdBackupZips.SelectedPath + @"\";
827 | }
828 | }
829 |
830 | private void cmdScratch_Click(object sender, EventArgs e)
831 | {
832 | fbdScratch.SelectedPath = txtScratchPad.Text;
833 | fbdScratch.ShowNewFolderButton = true;
834 | fbdBackupZips.Description = "Select a path to store temporary .bak files";
835 | if (fbdScratch.ShowDialog() == DialogResult.OK)
836 | {
837 | txtScratchPad.Text = fbdScratch.SelectedPath + @"\";
838 | }
839 | }
840 |
841 | private void cmdSQLDBFiles_Click(object sender, EventArgs e)
842 | {
843 | fbdSQLDBFiles.SelectedPath = _dbFileLocation;
844 | fbdSQLDBFiles.ShowNewFolderButton = true;
845 | fbdSQLDBFiles.Description = "Select the location of the SQL Server data files";
846 | if (fbdSQLDBFiles.ShowDialog() == DialogResult.OK)
847 | {
848 | txtSQLFileLocations.Text = fbdSQLDBFiles.SelectedPath + @"\";
849 | }
850 | }
851 |
852 | private void cmdSendTestEmail_Click(object sender, EventArgs e)
853 | {
854 | try
855 | {
856 | SmtpClient smtp = new SmtpClient
857 | {
858 | Host = txtSMTPServer.Text,
859 | Port = 25, //Convert.ToInt32(nudEmailOutgoingPortNumber.Value),
860 | EnableSsl = chkEnableSSL.Checked,
861 | UseDefaultCredentials = false,
862 | Credentials = new NetworkCredential(txtEmailLoginUserName.Text, txtEmailLoginUserPassword.Text),
863 | Timeout = 30000, // 30 seconds
864 | DeliveryMethod = SmtpDeliveryMethod.Network
865 | };
866 |
867 | MailMessage message = new MailMessage
868 | {
869 | From = new MailAddress(txtFromEmail.Text),
870 | Subject = "Test message from SQL Backup / Restore Utility",
871 | IsBodyHtml = true,
872 | Body = "This is a test ... and only a test!"
873 | };
874 | message.To.Add(new MailAddress(txtSuccessEmail.Text));
875 |
876 | txtLogFile.Text += "Test message send begun ..." + Environment.NewLine;
877 | Logger.LogMessage("Test message send begun ...");
878 |
879 | // ================
880 | smtp.Send(message);
881 | // ================
882 |
883 | txtLogFile.Text += "Test message send complete ... success!" + Environment.NewLine;
884 | Logger.LogMessage("Test message send complete ... success!");
885 | Logger.LogMessage("----------");
886 | }
887 | catch (Exception ex)
888 | {
889 | // ReSharper disable once LocalizableElement
890 | txtLogFile.Text += "Test message attempt failed!" + Environment.NewLine;
891 | txtLogFile.Text += ex.ToString() + Environment.NewLine;
892 | Logger.LogMessage("Test meesage attempt failed!");
893 | Logger.LogMessage(ex.ToString());
894 | Logger.LogMessage("----------");
895 |
896 | MessageBox.Show(ex.ToString(), _messageBoxCaption);
897 | }
898 | }
899 |
900 | private void cmdTestFTPTransfer_Click(object sender, EventArgs e)
901 | {
902 | progBar.Visible = true;
903 | progBar.Value = 0;
904 | _configurationSettings.TryGetValue("FTPUserName", out string FTPUserName);
905 | _configurationSettings.TryGetValue("FTPUserPassword", out string FTPUserPassword);
906 |
907 | try
908 | {
909 | WebClient client = new WebClient();
910 | client.Credentials = new NetworkCredential(txtFTPUserName.Text, txtFTPPassword.Text);
911 | client.UploadProgressChanged += new UploadProgressChangedEventHandler(UploadProgressChangedEventHandler);
912 | client.UploadFileCompleted += new UploadFileCompletedEventHandler(UploadFileCompletedEventHandler);
913 | progBar.Visible = true;
914 | progBar.Value = 0;
915 | client.UploadFileAsync( new Uri(@"ftp://novantconsulting.com/SQLBackups/Novant/StrataFrame.bak"), @"E:\Strataframe.bak");
916 | }
917 | catch (Exception)
918 | {
919 | throw;
920 | }
921 | }
922 |
923 | private void UploadProgressChangedEventHandler(object sender, UploadProgressChangedEventArgs e)
924 | {
925 | progBar.Value = e.ProgressPercentage;
926 | }
927 |
928 | private void UploadFileCompletedEventHandler(object sender, UploadFileCompletedEventArgs e)
929 | {
930 | progBar.Value = 100;
931 | if (MessageBox.Show(@"Upload completed!!!", _messageBoxCaption) == DialogResult.OK)
932 | {
933 | progBar.Visible = false;
934 | }
935 | }
936 |
937 | private void LoadDevelopmentDirectories()
938 | {
939 | if (Directory.Exists(txtDevFilesLocation.Text))
940 | {
941 | string[] directories = Directory.GetDirectories(txtDevFilesLocation.Text);
942 | foreach (string directory in directories)
943 | {
944 | dgvDevelopmentDirectories.Rows.Add(0, directory);
945 | }
946 | }
947 | }
948 |
949 | private void cmdBackupDevelopmentDirectories_Click(object sender, EventArgs e)
950 | {
951 | try
952 | {
953 | CopyEachDevelopmentDirectory();
954 | CreateDevelopmentZipFiles();
955 | DeleteScratchFiles();
956 | MessageBox.Show(@"Backup of development complete!!!", _messageBoxCaption);
957 | }
958 | catch (Exception exception)
959 | {
960 | Console.WriteLine(exception);
961 | throw;
962 | }
963 | }
964 |
965 | private void CopyEachDevelopmentDirectory()
966 | {
967 |
968 | for (int i = 0; i < dgvDevelopmentDirectories.Rows.Count; i++)
969 | {
970 | DataGridViewRow row = dgvDevelopmentDirectories.Rows[i];
971 | string value = row.Cells["colSelected"].Value.ToString();
972 |
973 | if (value=="true")
974 | {
975 | string sourceDirectoryName = (string)(dgvDevelopmentDirectories.Rows[i].Cells["colDirectoryName"].Value);
976 | string destinationDirectoryName = txtScratchPad.Text + sourceDirectoryName.Substring(3) + @"\";
977 |
978 | if (!Directory.Exists(destinationDirectoryName))
979 | {
980 | Directory.CreateDirectory(destinationDirectoryName);
981 | }
982 | CopyFolderContents(sourceDirectoryName, destinationDirectoryName);
983 | }
984 | }
985 | }
986 |
987 | private bool CopyFolderContents(string SourcePath, string DestinationPath)
988 | {
989 | SourcePath = SourcePath.EndsWith(@"\") ? SourcePath : SourcePath + @"\";
990 | DestinationPath = DestinationPath.EndsWith(@"\") ? DestinationPath : DestinationPath + @"\";
991 |
992 | try
993 | {
994 | if (Directory.Exists(SourcePath))
995 | {
996 | if (Directory.Exists(DestinationPath) == false)
997 | {
998 | Directory.CreateDirectory(DestinationPath);
999 | }
1000 |
1001 | foreach (string file in Directory.GetFiles(SourcePath))
1002 | {
1003 | FileInfo fileInfo = new FileInfo(file) {IsReadOnly = false};
1004 |
1005 | if ( fileInfo.Name.Contains(".dll") || fileInfo.Name.Contains(".pdb"))
1006 | {
1007 | if (chkSkipDLLS.Checked)
1008 | {
1009 | // ------------------------------------------
1010 | //Don't do anything ... skip all .dlls files'
1011 | // ------------------------------------------
1012 | }
1013 | else if (chkSkipPDBFiles.Checked)
1014 | {
1015 | // ------------------------------------------
1016 | // Don't do anything ... skip all .pdb files'
1017 | // ------------------------------------------
1018 | }
1019 | else
1020 | {
1021 | // -------------------------------------------------------
1022 | // Copy the file as if none of the checkboxes were checked
1023 | // -------------------------------------------------------
1024 | fileInfo.CopyTo(string.Format(@"{0}\{1}", DestinationPath, fileInfo.Name), true);
1025 | }
1026 | }
1027 | else
1028 | {
1029 | fileInfo.CopyTo(string.Format(@"{0}\{1}", DestinationPath, fileInfo.Name), true);
1030 | }
1031 | }
1032 |
1033 | foreach (string drs in Directory.GetDirectories(SourcePath))
1034 | {
1035 | DirectoryInfo directoryInfo = new DirectoryInfo(drs);
1036 | if (CopyFolderContents(drs, DestinationPath + directoryInfo.Name) == false)
1037 | {
1038 | return false;
1039 | }
1040 | }
1041 | }
1042 | return true;
1043 | }
1044 | catch (Exception ex)
1045 | {
1046 | string blah = ex.ToString();
1047 | return false;
1048 | }
1049 | }
1050 |
1051 | private void CreateDevelopmentZipFileNames()
1052 | {
1053 | _archiveFileName = _developmentZips + string.Format("{6}DEV_{0}{1}{2}_{3}{4}{5}",
1054 | DateTime.Now.Year.ToString().PadLeft(4, '0'),
1055 | DateTime.Now.Month.ToString().PadLeft(2, '0'),
1056 | DateTime.Now.Day.ToString().PadLeft(2, '0'),
1057 | DateTime.Now.Hour.ToString().PadLeft(2, '0'),
1058 | DateTime.Now.Minute.ToString().PadLeft(2, '0'),
1059 | DateTime.Now.Second.ToString().PadLeft(2, '0') + ".zip",
1060 | "DevelopmentBackup");
1061 |
1062 | txtDevZipName.Text = _archiveFileName;
1063 | }
1064 |
1065 | private void CreateDevelopmentZipFiles()
1066 | {
1067 |
1068 | ZipFile.CreateFromDirectory(txtScratchPad.Text, txtDevZipName.Text);
1069 |
1070 | }
1071 |
1072 | private void DeleteScratchFiles()
1073 | {
1074 | string message = "You are about to delete all of the directories and files in the " + txtScratchPad.Text +
1075 | " directory. Are you sure you want to do this?";
1076 | if (MessageBox.Show(message, _messageBoxCaption, MessageBoxButtons.YesNo) == DialogResult.Yes)
1077 | {
1078 | foreach (string directory in Directory.GetDirectories(txtScratchPad.Text))
1079 | {
1080 | DeleteDirectory(directory);
1081 | }
1082 | }
1083 | }
1084 |
1085 | private void DeleteDirectory(string path)
1086 | {
1087 | if (Directory.Exists(path))
1088 | {
1089 | try
1090 | {
1091 | foreach (string file in Directory.GetFiles(path))
1092 | {
1093 | File.Delete(file);
1094 | }
1095 | //Delete all child Directories
1096 | foreach (string directory in Directory.GetDirectories(path))
1097 | {
1098 | DeleteDirectory(directory);
1099 | }
1100 | //Delete a Directory
1101 | Directory.Delete(path);
1102 | }
1103 | catch (Exception)
1104 | {
1105 | throw;
1106 | }
1107 | }
1108 | }
1109 |
1110 | private void saveToolstripMenuItem_Click(object sender, EventArgs e)
1111 | {
1112 | SaveConfigurationSettings();
1113 | }
1114 |
1115 | private void tacMain_Selected(object sender, TabControlEventArgs e)
1116 | {
1117 | if (tacMain.SelectedIndex == 2)
1118 | {
1119 | CreateDevelopmentZipFileNames();
1120 | }
1121 | }
1122 |
1123 | private void cmdDevFilesLocation_Click(object sender, EventArgs e)
1124 | {
1125 | fbdDevFileLocations.SelectedPath = Environment.CurrentDirectory;
1126 | fbdDevFileLocations.ShowNewFolderButton = false;
1127 | fbdDevFileLocations.Description = "Select the location of your development backup .zip files";
1128 | if (fbdDevFileLocations.ShowDialog() == DialogResult.OK)
1129 | {
1130 | txtDevFilesLocation.Text = fbdDevFileLocations.SelectedPath + @"\";
1131 | _devFilesLocation = txtDevFilesLocation.Text;
1132 | LoadDevelopmentDirectories();
1133 | }
1134 | }
1135 |
1136 | private void cmdDevelopmentZips_Click(object sender, EventArgs e)
1137 | {
1138 | fbdDevelopmentZips.SelectedPath = Environment.CurrentDirectory;
1139 | fbdDevelopmentZips.ShowNewFolderButton = false;
1140 | fbdDevelopmentZips.Description = "Select the location of your development backup .zip files";
1141 | if (fbdDevelopmentZips.ShowDialog() == DialogResult.OK)
1142 | {
1143 | txtDevelopmentZips.Text = fbdDevelopmentZips.SelectedPath + @"\";
1144 | _developmentZips = txtDevelopmentZips.Text;
1145 | LoadDevelopmentDirectories();
1146 | }
1147 | }
1148 |
1149 | private void dbdDevZipDirectory_HelpRequest(object sender, EventArgs e)
1150 | {
1151 |
1152 | }
1153 |
1154 | private void cmdConfigureConn_Click(object sender, EventArgs e)
1155 | {
1156 | using (frmConfigureSqlConn oCSN = new frmConfigureSqlConn())
1157 | {
1158 | oCSN.ShowDialog();
1159 | if (oCSN.ConnectionString != String.Empty)
1160 | {
1161 | _sqlConn = new SqlConnection(oCSN.ConnectionString);
1162 | _sqlServer = new Server(new ServerConnection(_sqlConn));
1163 | PopulateGridWithDatabasesToBeBackedUp();
1164 | txtConnectionString.Text = oCSN.ConnectionString;
1165 | _configurationSettings["ConnectionString"] = oCSN.ConnectionString;
1166 | SaveConfigurationSettings();
1167 | }
1168 | }
1169 | }
1170 | }
1171 | }
1172 |
--------------------------------------------------------------------------------
/AboutBox.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
122 |
123 | /9j/4AAQSkZJRgABAQEASABIAAD/4QH4RXhpZgAATU0AKgAAAAgABgEPAAIAAAAOAAAAVgEQAAIAAAAG
124 | AAAAZAExAAIAAAAlAAAAagEyAAIAAAAUAAAAkAITAAMAAAABAAIAAIdpAAQAAAABAAAApAAAAABTb255
125 | IEVyaWNzc29uAEs3NTBpAFIxQ0EwMjEgICAgIHByZ0NYQzEyNTk1Ml9FVV8xX0NMIDUuMwAAMjAwNzow
126 | NzoyMiAxNjowODoxOAAAFYKaAAUAAAABAAABpoKdAAUAAAABAAABrognAAMAAAABAH0AAJAAAAcAAAAE
127 | MDIyMJADAAIAAAAUAAABtpAEAAIAAAAUAAABypEBAAcAAAAEAQIDAJIEAAoAAAABAAAB3pIHAAMAAAAB
128 | AAIAAJIIAAMAAAABAAAAAJIJAAMAAAABAAAAAKAAAAcAAAAEMDEwMKABAAMAAAABAAEAAKACAAQAAAAB
129 | AAAB4KADAAQAAAABAAACgKQBAAMAAAABAAAAAKQCAAMAAAABAAAAAKQDAAMAAAABAAAAAKQEAAUAAAAB
130 | AAAB5qQGAAMAAAABAAAAAKQMAAMAAAABAAMAAAAAAAAAAAABAAAZAAAAABwAAAAKMjAwNzowNzoyMiAx
131 | NjowODoxOAAyMDA3OjA3OjIyIDE2OjA4OjE4AAAAAAAAAAAKAAAAZAAAAGQAAP/bAEMABQMEBAQDBQQE
132 | BAUFBQYHDAgHBwcHDwsLCQwRDxISEQ8RERMWHBcTFBoVEREYIRgaHR0fHx8TFyIkIh4kHB4fHv/bAEMB
133 | BQUFBwYHDggIDh4UERQeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e
134 | Hh4eHv/AABEIAbwBSAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1
135 | EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZ
136 | GiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaX
137 | 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
752 | 0opbhY//2Q==
753 |
754 |
755 |
--------------------------------------------------------------------------------