From 7be4b4d2c06c98e303c487c321c7fd5305ac77ee Mon Sep 17 00:00:00 2001 From: adriancs Date: Tue, 18 Oct 2022 21:41:33 +0800 Subject: [PATCH] v2.3.7 --- .../EventArgs/ExportCompleteArgs.cs | 14 +- .../EventArgs/ImportCompleteArgs.cs | 38 ++--- .../EventArgs/ImportProgressArgs.cs | 12 +- .../Methods/CryptoExpress.cs | 68 ++++----- .../Methods/QueryExpress.cs | 38 ++--- .../MySqlBackup(Devart-Express).csproj | 30 +--- .../MySqlBackup.cs | 19 +-- .../MySqlScript/MySqlScript.cs | 2 +- .../EventArgs/ExportCompleteArgs.cs | 14 +- .../EventArgs/ImportCompleteArgs.cs | 38 ++--- .../EventArgs/ImportProgressArgs.cs | 12 +- .../Methods/CryptoExpress.cs | 68 ++++----- .../Methods/QueryExpress.cs | 41 +++--- .../MySqlBackup(MySql.Data).csproj | 23 +-- .../MySqlBackup.NET_debug_81_v1.zip | Bin 32127 -> 0 bytes .../MySqlBackup(MySql.Data)/MySqlBackup.cs | 19 +-- .../EventArgs/ExportCompleteArgs.cs | 14 +- .../EventArgs/ImportCompleteArgs.cs | 38 ++--- .../EventArgs/ImportProgressArgs.cs | 12 +- .../Methods/CryptoExpress.cs | 68 ++++----- .../Methods/QueryExpress.cs | 43 +++--- .../MySqlBackup(MySqlConnector).csproj | 23 +-- .../MySqlBackup.cs | 19 +-- .../MySqlScript/MySqlScript.cs | 2 +- source code/MySqlBackup.sln | 20 +-- source code/README.md | 134 ++++++++++++++++++ source code/Test_ASPNET/Index.aspx | 13 +- source code/Test_ASPNET/Index.aspx.cs | 4 +- source code/Test_ASPNET/Test_ASP.NET.csproj | 37 ++--- source code/Test_ASPNET/Web.config | 36 ++--- source code/Test_ASPNET/packages.config | 16 +-- source code/Test_WinForm/packages.config | 12 -- .../Test_WinForm_DevartExpress/App.config | 4 +- .../CryptoExpress.cs | 46 ++++++ .../FormCompareFile.cs | 2 +- .../FormTestViewDependencies.cs | 2 +- .../FormToolCreateSampleTable.cs | 1 - .../Test_WinForm_DevartExpress/Program.cs | 4 +- .../Properties/Settings.Designer.cs | 2 +- .../Test_WinForm_DevartExpress.csproj | 11 +- .../packages.config | 2 +- .../Test_WinForm_MySqlConnector/App.config | 10 +- .../CryptoExpress.cs | 46 ++++++ .../FormCompareFile.cs | 2 +- .../FormTestViewDependencies.cs | 2 +- .../FormToolCreateSampleTable.cs | 1 - .../Test_WinForm_MySqlConnector/Program.cs | 7 +- .../Properties/Resources.Designer.cs | 2 +- .../Properties/Settings.Designer.cs | 2 +- .../Test_WinForm_MySqlConnector.csproj | 27 ++-- .../packages.config | 16 +-- .../Test_WinForm_MySqlData/CryptoExpress.cs | 46 ++++++ .../FormAbout.Designer.cs | 0 .../FormAbout.cs | 0 .../FormAbout.resx | 0 .../FormCompareFile.Designer.cs | 0 .../FormCompareFile.cs | 4 +- .../FormCompareFile.resx | 0 .../FormConnStringBuilder.Designer.cs | 0 .../FormConnStringBuilder.cs | 0 .../FormConnStringBuilder.resx | 0 .../FormDatabaseInfo.Designer.cs | 0 .../FormDatabaseInfo.cs | 0 .../FormDatabaseInfo.resx | 0 .../FormDecryptOldDumpFile.Designer.cs | 0 .../FormDecryptOldDumpFile.cs | 0 .../FormDecryptOldDumpFile.resx | 0 .../FormDumpFileViewer.Designer.cs | 0 .../FormDumpFileViewer.cs | 0 .../FormDumpFileViewer.resx | 0 .../FormMain.Designer.cs | 0 .../FormMain.cs | 0 .../FormMain.resx | 0 .../FormQueryBrowser.Designer.cs | 0 .../FormQueryBrowser.cs | 0 .../FormQueryBrowser.resx | 0 .../FormQueryBrowser2.Designer.cs | 0 .../FormQueryBrowser2.cs | 0 .../FormQueryBrowser2.resx | 0 .../FormReference.Designer.cs | 0 .../FormReference.cs | 0 .../FormReference.resx | 0 .../FormTestBlob.Designer.cs | 0 .../FormTestBlob.cs | 0 .../FormTestBlob.resx | 0 .../FormTestCustomTablesExport.Designer.cs | 0 .../FormTestCustomTablesExport.cs | 0 .../FormTestCustomTablesExport.resx | 0 .../FormTestEncryptDecrypt.Designer.cs | 0 .../FormTestEncryptDecrypt.cs | 0 .../FormTestEncryptDecrypt.resx | 0 .../FormTestExImWithOptions.Designer.cs | 0 .../FormTestExImWithOptions.cs | 0 .../FormTestExImWithOptions.resx | 0 .../FormTestExcludeTables.Designer.cs | 0 .../FormTestExcludeTables.cs | 0 .../FormTestExcludeTables.resx | 0 .../FormTestExportImportMemory.Designer.cs | 0 .../FormTestExportImportMemory.cs | 0 .../FormTestExportImportMemory.resx | 0 .../FormTestExportImportString.Designer.cs | 0 .../FormTestExportImportString.cs | 0 .../FormTestExportImportString.resx | 0 .../FormTestExportProgresBar.Designer.cs | 0 .../FormTestExportProgresBar.cs | 0 .../FormTestExportProgresBar.resx | 0 .../FormTestImportCaptureError.Designer.cs | 0 .../FormTestImportCaptureError.cs | 0 .../FormTestImportCaptureError.resx | 0 .../FormTestImportProgressReport.Designer.cs | 0 .../FormTestImportProgressReport.cs | 0 .../FormTestImportProgressReport.resx | 0 .../FormTestModifyHeadersFooters.Designer.cs | 0 .../FormTestModifyHeadersFooters.cs | 0 .../FormTestModifyHeadersFooters.resx | 0 .../FormTestSimple.Designer.cs | 0 .../FormTestSimple.cs | 0 .../FormTestSimple.resx | 0 .../FormTestViewDependencies.Designer.cs | 0 .../FormTestViewDependencies.cs | 2 +- .../FormTestViewDependencies.resx | 0 .../FormTestZip.Designer.cs | 0 .../FormTestZip.cs | 0 .../FormTestZip.resx | 0 .../FormToolCreateSampleTable.Designer.cs | 0 .../FormToolCreateSampleTable.cs | 1 - .../FormToolCreateSampleTable.resx | 0 .../HtmlExpress.cs | 0 .../Program.cs | 5 +- .../Properties/AssemblyInfo.cs | 0 .../Properties/Resources.Designer.cs | 2 +- .../Properties/Resources.resx | 0 .../Properties/Settings.Designer.cs | 2 +- .../Properties/Settings.settings | 0 .../Resources/bullet_cross.png | Bin .../Resources/disk.png | Bin .../Resources/disk_edit.png | Bin .../Resources/folder.png | Bin .../Resources/logo128.png | Bin .../Resources/q2.png | Bin .../Test_WinForm_MySqlData.csproj} | 47 +++--- .../ZipStorer.cs | 0 .../app.config | 40 +++--- .../logo.ico | Bin .../Test_WinForm_MySqlData/packages.config | 13 ++ 145 files changed, 745 insertions(+), 533 deletions(-) delete mode 100644 source code/MySqlBackup(MySql.Data)/MySqlBackup.NET_debug_81_v1.zip create mode 100644 source code/README.md delete mode 100644 source code/Test_WinForm/packages.config create mode 100644 source code/Test_WinForm_DevartExpress/CryptoExpress.cs create mode 100644 source code/Test_WinForm_MySqlConnector/CryptoExpress.cs create mode 100644 source code/Test_WinForm_MySqlData/CryptoExpress.cs rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormAbout.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormAbout.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormAbout.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormCompareFile.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormCompareFile.cs (96%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormCompareFile.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormConnStringBuilder.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormConnStringBuilder.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormConnStringBuilder.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormDatabaseInfo.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormDatabaseInfo.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormDatabaseInfo.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormDecryptOldDumpFile.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormDecryptOldDumpFile.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormDecryptOldDumpFile.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormDumpFileViewer.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormDumpFileViewer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormDumpFileViewer.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormMain.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormMain.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormMain.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormQueryBrowser.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormQueryBrowser.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormQueryBrowser.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormQueryBrowser2.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormQueryBrowser2.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormQueryBrowser2.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormReference.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormReference.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormReference.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestBlob.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestBlob.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestBlob.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestCustomTablesExport.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestCustomTablesExport.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestCustomTablesExport.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestEncryptDecrypt.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestEncryptDecrypt.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestEncryptDecrypt.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExImWithOptions.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExImWithOptions.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExImWithOptions.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExcludeTables.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExcludeTables.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExcludeTables.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExportImportMemory.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExportImportMemory.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExportImportMemory.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExportImportString.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExportImportString.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExportImportString.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExportProgresBar.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExportProgresBar.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestExportProgresBar.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestImportCaptureError.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestImportCaptureError.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestImportCaptureError.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestImportProgressReport.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestImportProgressReport.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestImportProgressReport.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestModifyHeadersFooters.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestModifyHeadersFooters.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestModifyHeadersFooters.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestSimple.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestSimple.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestSimple.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestViewDependencies.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestViewDependencies.cs (99%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestViewDependencies.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestZip.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestZip.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormTestZip.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormToolCreateSampleTable.Designer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormToolCreateSampleTable.cs (99%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/FormToolCreateSampleTable.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/HtmlExpress.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Program.cs (93%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Properties/AssemblyInfo.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Properties/Resources.Designer.cs (98%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Properties/Resources.resx (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Properties/Settings.Designer.cs (97%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Properties/Settings.settings (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Resources/bullet_cross.png (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Resources/disk.png (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Resources/disk_edit.png (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Resources/folder.png (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Resources/logo128.png (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/Resources/q2.png (100%) rename source code/{Test_WinForm/Test_WinForm.csproj => Test_WinForm_MySqlData/Test_WinForm_MySqlData.csproj} (89%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/ZipStorer.cs (100%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/app.config (57%) rename source code/{Test_WinForm => Test_WinForm_MySqlData}/logo.ico (100%) create mode 100644 source code/Test_WinForm_MySqlData/packages.config diff --git a/source code/MySqlBackup(Devart-Express)/EventArgs/ExportCompleteArgs.cs b/source code/MySqlBackup(Devart-Express)/EventArgs/ExportCompleteArgs.cs index 620359b..b3a687d 100644 --- a/source code/MySqlBackup(Devart-Express)/EventArgs/ExportCompleteArgs.cs +++ b/source code/MySqlBackup(Devart-Express)/EventArgs/ExportCompleteArgs.cs @@ -6,12 +6,12 @@ namespace Devart.Data.MySql { public class ExportCompleteArgs { - DateTime _timeStart, _timeEnd; - TimeSpan _timeUsed = new TimeSpan(); + MySqlBackup.ProcessEndType _completionType; + DateTime _timeStart; + DateTime _timeEnd; + TimeSpan _timeUsed; Exception _exception; - MySqlBackup.ProcessEndType _completionType = MySqlBackup.ProcessEndType.UnknownStatus; - /// /// The Starting time of export process. /// @@ -25,14 +25,14 @@ public class ExportCompleteArgs /// /// Total time used in current export process. /// - public TimeSpan TimeUsed { get { return _timeUsed;}} + public TimeSpan TimeUsed { get { return _timeUsed; } } public MySqlBackup.ProcessEndType CompletionType { get { return _completionType; } } public Exception LastError { get { return _exception; } } - public bool HasError { get { if (LastError != null) return true; return false; } } - + public bool HasError { get { if (_exception != null) return true; return false; } } + public ExportCompleteArgs(DateTime timeStart, DateTime timeEnd, MySqlBackup.ProcessEndType endType, Exception exception) { _completionType = endType; diff --git a/source code/MySqlBackup(Devart-Express)/EventArgs/ImportCompleteArgs.cs b/source code/MySqlBackup(Devart-Express)/EventArgs/ImportCompleteArgs.cs index 2b9f7d5..2b9d3b3 100644 --- a/source code/MySqlBackup(Devart-Express)/EventArgs/ImportCompleteArgs.cs +++ b/source code/MySqlBackup(Devart-Express)/EventArgs/ImportCompleteArgs.cs @@ -6,26 +6,26 @@ namespace Devart.Data.MySql { public class ImportCompleteArgs { + MySqlBackup.ProcessEndType _completionType; + DateTime _timeStart; + DateTime _timeEnd; + TimeSpan _timeUsed; + Exception _exception; + /// /// The starting time of import process. /// - public DateTime TimeStart; + public DateTime TimeStart { get { return _timeStart; } } /// /// The ending time of import process. /// - public DateTime TimeEnd; + public DateTime TimeEnd { get { return _timeEnd; } } /// - /// Enum of completion type + /// The completion type of current import processs. /// - public enum CompleteType - { - UnknownStatus, - Completed, - Cancelled, - Error - } + public MySqlBackup.ProcessEndType CompleteType { get { return _completionType; } } /// /// Indicates whether the import process has error(s). @@ -35,16 +35,20 @@ public enum CompleteType /// /// The last error (exception) occur in import process. /// - public Exception LastError = null; - - // - /// The completion type of current import processs. - /// - public CompleteType CompletedType = CompleteType.Completed; + public Exception LastError { get { return _exception; } } /// /// Total time used in current import process. /// - public TimeSpan TimeUsed => TimeEnd - TimeStart; + public TimeSpan TimeUsed { get { return _timeUsed; } } + + public ImportCompleteArgs(MySqlBackup.ProcessEndType completionType, DateTime timeStart, DateTime timeEnd, Exception exception) + { + _completionType = completionType; + _timeStart = timeStart; + _timeEnd = timeEnd; + _timeUsed = timeEnd - timeStart; + _exception = exception; + } } } diff --git a/source code/MySqlBackup(Devart-Express)/EventArgs/ImportProgressArgs.cs b/source code/MySqlBackup(Devart-Express)/EventArgs/ImportProgressArgs.cs index 4f8e809..abc8cfc 100644 --- a/source code/MySqlBackup(Devart-Express)/EventArgs/ImportProgressArgs.cs +++ b/source code/MySqlBackup(Devart-Express)/EventArgs/ImportProgressArgs.cs @@ -8,6 +8,7 @@ public class ImportProgressArgs : EventArgs { long _curBytes = 0L; long _totalBytes = 0L; + double _percentComplete = 0d; /// /// Number of processed bytes in current import process. @@ -22,12 +23,21 @@ public class ImportProgressArgs : EventArgs /// /// Percentage of completeness. /// - public int PercentageCompleted { get { return (int)(CurrentBytes *100L / TotalBytes); } } + public double PercentageCompleted { get { return _percentComplete; } } public ImportProgressArgs(long currentBytes, long totalBytes) { _curBytes = currentBytes; _totalBytes = totalBytes; + + if (currentBytes == 0L || totalBytes == 0L) + { + _percentComplete = 0d; + } + else + { + _percentComplete = (double)currentBytes / (double)totalBytes * 100d; + } } } } diff --git a/source code/MySqlBackup(Devart-Express)/Methods/CryptoExpress.cs b/source code/MySqlBackup(Devart-Express)/Methods/CryptoExpress.cs index 43853fd..48bb1ca 100644 --- a/source code/MySqlBackup(Devart-Express)/Methods/CryptoExpress.cs +++ b/source code/MySqlBackup(Devart-Express)/Methods/CryptoExpress.cs @@ -29,44 +29,44 @@ public static string ConvertByteArrayToHexString(byte[] ba) return new string(c); } - public static string RandomString(int size) - { - byte[] randBuffer = new byte[size + (10)]; - RandomNumberGenerator.Create().GetBytes(randBuffer); - return System.Convert.ToBase64String(randBuffer).Replace("/", string.Empty).Replace("+", string.Empty).Replace("=", string.Empty).Remove(size); - } + //public static string RandomString(int size) + //{ + // byte[] randBuffer = new byte[size + (10)]; + // RandomNumberGenerator.Create().GetBytes(randBuffer); + // return System.Convert.ToBase64String(randBuffer).Replace("/", string.Empty).Replace("+", string.Empty).Replace("=", string.Empty).Remove(size); + //} - public static string Sha128Hash(string input) - { - SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider(); - byte[] ba = Encoding.UTF8.GetBytes(input); - byte[] ba2 = sha.ComputeHash(ba); - sha = null; - return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); - } + //public static string Sha128Hash(string input) + //{ + // SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider(); + // byte[] ba = Encoding.UTF8.GetBytes(input); + // byte[] ba2 = sha.ComputeHash(ba); + // sha = null; + // return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); + //} - public static string Sha256Hash(string input) - { - byte[] ba = Encoding.UTF8.GetBytes(input); - return Sha256Hash(ba); - } + //public static string Sha256Hash(string input) + //{ + // byte[] ba = Encoding.UTF8.GetBytes(input); + // return Sha256Hash(ba); + //} - public static string Sha256Hash(byte[] ba) - { - SHA256Managed sha2 = new SHA256Managed(); - byte[] ba2 = sha2.ComputeHash(ba); - sha2 = null; - return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); - } + //public static string Sha256Hash(byte[] ba) + //{ + // SHA256Managed sha2 = new SHA256Managed(); + // byte[] ba2 = sha2.ComputeHash(ba); + // sha2 = null; + // return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); + //} - public static string Sha512Hash(string input) - { - byte[] ba = Encoding.UTF8.GetBytes(input); - SHA512Managed sha5 = new SHA512Managed(); - byte[] ba2 = sha5.ComputeHash(ba); - sha5 = null; - return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); - } + //public static string Sha512Hash(string input) + //{ + // byte[] ba = Encoding.UTF8.GetBytes(input); + // SHA512Managed sha5 = new SHA512Managed(); + // byte[] ba2 = sha5.ComputeHash(ba); + // sha5 = null; + // return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); + //} //public static string AES_Encrypt(string input, string password) //{ diff --git a/source code/MySqlBackup(Devart-Express)/Methods/QueryExpress.cs b/source code/MySqlBackup(Devart-Express)/Methods/QueryExpress.cs index edb848a..57975ba 100644 --- a/source code/MySqlBackup(Devart-Express)/Methods/QueryExpress.cs +++ b/source code/MySqlBackup(Devart-Express)/Methods/QueryExpress.cs @@ -90,37 +90,37 @@ static void escape_string(StringBuilder sb, char c) switch (c) { case '\\': // Backslash - sb.AppendFormat("\\\\"); + sb.Append("\\\\"); break; case '\0': // Null - sb.AppendFormat("\\0"); + sb.Append("\\0"); break; case '\r': // Carriage return - sb.AppendFormat("\\r"); + sb.Append("\\r"); break; case '\n': // New Line - sb.AppendFormat("\\n"); + sb.Append("\\n"); + break; + case '\a': // Vertical tab + sb.Append("\\a"); break; - //case '\a': // Vertical tab - // builder.AppendFormat("\\a"); - // break; case '\b': // Backspace - sb.AppendFormat("\\b"); + sb.Append("\\b"); + break; + case '\f': // Formfeed + sb.Append("\\f"); + break; + case '\t': // Horizontal tab + sb.Append("\\t"); + break; + case '\v': // Vertical tab + sb.Append("\\v"); break; - //case '\f': // Formfeed - // builder.AppendFormat("\\f"); - // break; - //case '\t': // Horizontal tab - // sb.AppendFormat("\\t"); - // break; - //case '\v': // Vertical tab - // builder.AppendFormat("\\v"); - // break; case '\"': // Double quotation mark - sb.AppendFormat("\\\""); + sb.Append("\\\""); break; case '\'': // Single quotation mark - sb.AppendFormat("''"); + sb.Append("''"); break; default: sb.Append(c); diff --git a/source code/MySqlBackup(Devart-Express)/MySqlBackup(Devart-Express).csproj b/source code/MySqlBackup(Devart-Express)/MySqlBackup(Devart-Express).csproj index 6186bd5..d0d76e0 100644 --- a/source code/MySqlBackup(Devart-Express)/MySqlBackup(Devart-Express).csproj +++ b/source code/MySqlBackup(Devart-Express)/MySqlBackup(Devart-Express).csproj @@ -1,7 +1,7 @@ - NET48;NET472;NET461;NET452;netcoreapp2.0;netcoreapp2.1;netcoreapp2.2;netcoreapp3.0;net5.0 + net46;net47;net48;net481 Devart.Data.MySql MySqlBackupNet.DevartExpress logo.ico @@ -13,14 +13,12 @@ A tool to backup and restore MySQL database in C#/VB.NET/ASP.NET. A special build for Devart Express (MySql) dotConnect. MySqlBackup.NET https://github.com/MySqlBackupNET/MySqlBackup.Net - logo128.png https://github.com/MySqlBackupNET/MySqlBackup.Net.git git mysqlbackup;devart;mysql - 2.3.6.2 - 2.3.6.2 - 2.3.6.2 - README.md + 2.3.7 + 2.3.7 + 2.3.7 @@ -92,25 +90,7 @@ - - True - - - - True - - - - - - - - - - - True - - + diff --git a/source code/MySqlBackup(Devart-Express)/MySqlBackup.cs b/source code/MySqlBackup(Devart-Express)/MySqlBackup.cs index 56114ef..38d18f1 100644 --- a/source code/MySqlBackup(Devart-Express)/MySqlBackup.cs +++ b/source code/MySqlBackup(Devart-Express)/MySqlBackup.cs @@ -1385,30 +1385,21 @@ void ReportEndProcess() ReportProgress(); if (ImportCompleted != null) { - ImportCompleteArgs.CompleteType completedType; + MySqlBackup.ProcessEndType completedType = ProcessEndType.UnknownStatus; switch (processCompletionType) { case ProcessEndType.Complete: - completedType = ImportCompleteArgs.CompleteType.Completed; + completedType = MySqlBackup.ProcessEndType.Complete; break; case ProcessEndType.Error: - completedType = ImportCompleteArgs.CompleteType.Error; + completedType = MySqlBackup.ProcessEndType.Error; break; case ProcessEndType.Cancelled: - completedType = ImportCompleteArgs.CompleteType.Cancelled; - break; - default: - completedType = ImportCompleteArgs.CompleteType.UnknownStatus; + completedType = MySqlBackup.ProcessEndType.Cancelled; break; } - ImportCompleteArgs arg = new ImportCompleteArgs() - { - LastError = _lastError, - CompletedType = completedType, - TimeStart = timeStart, - TimeEnd = timeEnd, - }; + ImportCompleteArgs arg = new ImportCompleteArgs(completedType, timeStart, timeEnd, _lastError); ImportCompleted(this, arg); } } diff --git a/source code/MySqlBackup(Devart-Express)/MySqlScript/MySqlScript.cs b/source code/MySqlBackup(Devart-Express)/MySqlScript/MySqlScript.cs index dd2c36a..dda59bc 100644 --- a/source code/MySqlBackup(Devart-Express)/MySqlScript/MySqlScript.cs +++ b/source code/MySqlBackup(Devart-Express)/MySqlScript/MySqlScript.cs @@ -156,7 +156,7 @@ public int Execute() // therefore safely allow the use of user variables. no one should be using // this connection while we are using it so we can temporarily tell it // to allow the use of user variables - bool allowUserVars = true; + //bool allowUserVars = true; try { diff --git a/source code/MySqlBackup(MySql.Data)/EventArgs/ExportCompleteArgs.cs b/source code/MySqlBackup(MySql.Data)/EventArgs/ExportCompleteArgs.cs index 8df6694..4618d75 100644 --- a/source code/MySqlBackup(MySql.Data)/EventArgs/ExportCompleteArgs.cs +++ b/source code/MySqlBackup(MySql.Data)/EventArgs/ExportCompleteArgs.cs @@ -6,12 +6,12 @@ namespace MySql.Data.MySqlClient { public class ExportCompleteArgs { - DateTime _timeStart, _timeEnd; - TimeSpan _timeUsed = new TimeSpan(); + MySqlBackup.ProcessEndType _completionType; + DateTime _timeStart; + DateTime _timeEnd; + TimeSpan _timeUsed; Exception _exception; - MySqlBackup.ProcessEndType _completionType = MySqlBackup.ProcessEndType.UnknownStatus; - /// /// The Starting time of export process. /// @@ -25,14 +25,14 @@ public class ExportCompleteArgs /// /// Total time used in current export process. /// - public TimeSpan TimeUsed { get { return _timeUsed;}} + public TimeSpan TimeUsed { get { return _timeUsed; } } public MySqlBackup.ProcessEndType CompletionType { get { return _completionType; } } public Exception LastError { get { return _exception; } } - public bool HasError { get { if (LastError != null) return true; return false; } } - + public bool HasError { get { if (_exception != null) return true; return false; } } + public ExportCompleteArgs(DateTime timeStart, DateTime timeEnd, MySqlBackup.ProcessEndType endType, Exception exception) { _completionType = endType; diff --git a/source code/MySqlBackup(MySql.Data)/EventArgs/ImportCompleteArgs.cs b/source code/MySqlBackup(MySql.Data)/EventArgs/ImportCompleteArgs.cs index ec9595d..031153a 100644 --- a/source code/MySqlBackup(MySql.Data)/EventArgs/ImportCompleteArgs.cs +++ b/source code/MySqlBackup(MySql.Data)/EventArgs/ImportCompleteArgs.cs @@ -6,26 +6,26 @@ namespace MySql.Data.MySqlClient { public class ImportCompleteArgs { + MySqlBackup.ProcessEndType _completionType; + DateTime _timeStart; + DateTime _timeEnd; + TimeSpan _timeUsed; + Exception _exception; + /// /// The starting time of import process. /// - public DateTime TimeStart; + public DateTime TimeStart { get { return _timeStart; } } /// /// The ending time of import process. /// - public DateTime TimeEnd; + public DateTime TimeEnd { get { return _timeEnd; } } /// - /// Enum of completion type + /// The completion type of current import processs. /// - public enum CompleteType - { - UnknownStatus, - Completed, - Cancelled, - Error - } + public MySqlBackup.ProcessEndType CompleteType { get { return _completionType; } } /// /// Indicates whether the import process has error(s). @@ -35,16 +35,20 @@ public enum CompleteType /// /// The last error (exception) occur in import process. /// - public Exception LastError = null; - - // - /// The completion type of current import processs. - /// - public CompleteType CompletedType = CompleteType.Completed; + public Exception LastError { get { return _exception; } } /// /// Total time used in current import process. /// - public TimeSpan TimeUsed => TimeEnd - TimeStart; + public TimeSpan TimeUsed { get { return _timeUsed; } } + + public ImportCompleteArgs(MySqlBackup.ProcessEndType completionType, DateTime timeStart, DateTime timeEnd, Exception exception) + { + _completionType = completionType; + _timeStart = timeStart; + _timeEnd = timeEnd; + _timeUsed = timeEnd - timeStart; + _exception = exception; + } } } diff --git a/source code/MySqlBackup(MySql.Data)/EventArgs/ImportProgressArgs.cs b/source code/MySqlBackup(MySql.Data)/EventArgs/ImportProgressArgs.cs index 68d3816..a67cd22 100644 --- a/source code/MySqlBackup(MySql.Data)/EventArgs/ImportProgressArgs.cs +++ b/source code/MySqlBackup(MySql.Data)/EventArgs/ImportProgressArgs.cs @@ -8,6 +8,7 @@ public class ImportProgressArgs : EventArgs { long _curBytes = 0L; long _totalBytes = 0L; + double _percentComplete = 0d; /// /// Number of processed bytes in current import process. @@ -22,12 +23,21 @@ public class ImportProgressArgs : EventArgs /// /// Percentage of completeness. /// - public int PercentageCompleted { get { return (int)(CurrentBytes *100L / TotalBytes); } } + public double PercentageCompleted { get { return _percentComplete; } } public ImportProgressArgs(long currentBytes, long totalBytes) { _curBytes = currentBytes; _totalBytes = totalBytes; + + if (currentBytes == 0L || totalBytes == 0L) + { + _percentComplete = 0d; + } + else + { + _percentComplete = (double)currentBytes / (double)totalBytes * 100d; + } } } } diff --git a/source code/MySqlBackup(MySql.Data)/Methods/CryptoExpress.cs b/source code/MySqlBackup(MySql.Data)/Methods/CryptoExpress.cs index 43853fd..48bb1ca 100644 --- a/source code/MySqlBackup(MySql.Data)/Methods/CryptoExpress.cs +++ b/source code/MySqlBackup(MySql.Data)/Methods/CryptoExpress.cs @@ -29,44 +29,44 @@ public static string ConvertByteArrayToHexString(byte[] ba) return new string(c); } - public static string RandomString(int size) - { - byte[] randBuffer = new byte[size + (10)]; - RandomNumberGenerator.Create().GetBytes(randBuffer); - return System.Convert.ToBase64String(randBuffer).Replace("/", string.Empty).Replace("+", string.Empty).Replace("=", string.Empty).Remove(size); - } + //public static string RandomString(int size) + //{ + // byte[] randBuffer = new byte[size + (10)]; + // RandomNumberGenerator.Create().GetBytes(randBuffer); + // return System.Convert.ToBase64String(randBuffer).Replace("/", string.Empty).Replace("+", string.Empty).Replace("=", string.Empty).Remove(size); + //} - public static string Sha128Hash(string input) - { - SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider(); - byte[] ba = Encoding.UTF8.GetBytes(input); - byte[] ba2 = sha.ComputeHash(ba); - sha = null; - return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); - } + //public static string Sha128Hash(string input) + //{ + // SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider(); + // byte[] ba = Encoding.UTF8.GetBytes(input); + // byte[] ba2 = sha.ComputeHash(ba); + // sha = null; + // return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); + //} - public static string Sha256Hash(string input) - { - byte[] ba = Encoding.UTF8.GetBytes(input); - return Sha256Hash(ba); - } + //public static string Sha256Hash(string input) + //{ + // byte[] ba = Encoding.UTF8.GetBytes(input); + // return Sha256Hash(ba); + //} - public static string Sha256Hash(byte[] ba) - { - SHA256Managed sha2 = new SHA256Managed(); - byte[] ba2 = sha2.ComputeHash(ba); - sha2 = null; - return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); - } + //public static string Sha256Hash(byte[] ba) + //{ + // SHA256Managed sha2 = new SHA256Managed(); + // byte[] ba2 = sha2.ComputeHash(ba); + // sha2 = null; + // return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); + //} - public static string Sha512Hash(string input) - { - byte[] ba = Encoding.UTF8.GetBytes(input); - SHA512Managed sha5 = new SHA512Managed(); - byte[] ba2 = sha5.ComputeHash(ba); - sha5 = null; - return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); - } + //public static string Sha512Hash(string input) + //{ + // byte[] ba = Encoding.UTF8.GetBytes(input); + // SHA512Managed sha5 = new SHA512Managed(); + // byte[] ba2 = sha5.ComputeHash(ba); + // sha5 = null; + // return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); + //} //public static string AES_Encrypt(string input, string password) //{ diff --git a/source code/MySqlBackup(MySql.Data)/Methods/QueryExpress.cs b/source code/MySqlBackup(MySql.Data)/Methods/QueryExpress.cs index 6d1bad3..dc3b192 100644 --- a/source code/MySqlBackup(MySql.Data)/Methods/QueryExpress.cs +++ b/source code/MySqlBackup(MySql.Data)/Methods/QueryExpress.cs @@ -67,8 +67,9 @@ public static string ExecuteScalarStr(MySqlCommand cmd, string sql, string colum public static long ExecuteScalarLong(MySqlCommand cmd, string sql) { + long l = 0; cmd.CommandText = sql; - long.TryParse(cmd.ExecuteScalar() + "", out var l); + long.TryParse(cmd.ExecuteScalar() + "", out l); return l; } @@ -89,37 +90,37 @@ static void escape_string(StringBuilder sb, char c) switch (c) { case '\\': // Backslash - sb.AppendFormat("\\\\"); + sb.Append("\\\\"); break; case '\0': // Null - sb.AppendFormat("\\0"); + sb.Append("\\0"); break; case '\r': // Carriage return - sb.AppendFormat("\\r"); + sb.Append("\\r"); break; case '\n': // New Line - sb.AppendFormat("\\n"); + sb.Append("\\n"); + break; + case '\a': // Vertical tab + sb.Append("\\a"); break; - //case '\a': // Vertical tab - // builder.AppendFormat("\\a"); - // break; case '\b': // Backspace - sb.AppendFormat("\\b"); + sb.Append("\\b"); + break; + case '\f': // Formfeed + sb.Append("\\f"); + break; + case '\t': // Horizontal tab + sb.Append("\\t"); + break; + case '\v': // Vertical tab + sb.Append("\\v"); break; - //case '\f': // Formfeed - // builder.AppendFormat("\\f"); - // break; - //case '\t': // Horizontal tab - // sb.AppendFormat("\\t"); - // break; - //case '\v': // Vertical tab - // builder.AppendFormat("\\v"); - // break; case '\"': // Double quotation mark - sb.AppendFormat("\\\""); + sb.Append("\\\""); break; case '\'': // Single quotation mark - sb.AppendFormat("''"); + sb.Append("''"); break; default: sb.Append(c); diff --git a/source code/MySqlBackup(MySql.Data)/MySqlBackup(MySql.Data).csproj b/source code/MySqlBackup(MySql.Data)/MySqlBackup(MySql.Data).csproj index 98cbfcb..2478c76 100644 --- a/source code/MySqlBackup(MySql.Data)/MySqlBackup(MySql.Data).csproj +++ b/source code/MySqlBackup(MySql.Data)/MySqlBackup(MySql.Data).csproj @@ -1,7 +1,7 @@ - netstandard2.0;NET48;NET472;NET461;NET452 + net48;net481;netstandard2.0;netstandard2.1;net6.0; MySql.Data.Client true disable @@ -12,16 +12,14 @@ A tool to backup and restore MySQL database in C#/VB.NET/ASP.NET. Public Domain https://github.com/MySqlBackupNET/MySqlBackup.Net - logo128.png git https://github.com/MySqlBackupNET/MySqlBackup.Net - 2.3.6.2 - 2.3.6.2 - 2.3.6.2 + 2.3.7 + 2.3.7 + 2.3.7 True MySqlBackup logo.ico - README.md @@ -29,18 +27,7 @@ - - True - - - - True - - - - - - + diff --git a/source code/MySqlBackup(MySql.Data)/MySqlBackup.NET_debug_81_v1.zip b/source code/MySqlBackup(MySql.Data)/MySqlBackup.NET_debug_81_v1.zip deleted file mode 100644 index 35969d3c15bdee56ca007a66c4ffe3dff1397222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32127 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 Tq50Fd$9oeCIPq4Te!lvD#Bbi* diff --git a/source code/MySqlBackup(MySql.Data)/MySqlBackup.cs b/source code/MySqlBackup(MySql.Data)/MySqlBackup.cs index 6e723fc..918c8bb 100644 --- a/source code/MySqlBackup(MySql.Data)/MySqlBackup.cs +++ b/source code/MySqlBackup(MySql.Data)/MySqlBackup.cs @@ -1385,30 +1385,21 @@ void ReportEndProcess() ReportProgress(); if (ImportCompleted != null) { - ImportCompleteArgs.CompleteType completedType; + MySqlBackup.ProcessEndType completedType = ProcessEndType.UnknownStatus; switch (processCompletionType) { case ProcessEndType.Complete: - completedType = ImportCompleteArgs.CompleteType.Completed; + completedType = MySqlBackup.ProcessEndType.Complete; break; case ProcessEndType.Error: - completedType = ImportCompleteArgs.CompleteType.Error; + completedType = MySqlBackup.ProcessEndType.Error; break; case ProcessEndType.Cancelled: - completedType = ImportCompleteArgs.CompleteType.Cancelled; - break; - default: - completedType = ImportCompleteArgs.CompleteType.UnknownStatus; + completedType = MySqlBackup.ProcessEndType.Cancelled; break; } - ImportCompleteArgs arg = new ImportCompleteArgs() - { - LastError = _lastError, - CompletedType = completedType, - TimeStart = timeStart, - TimeEnd = timeEnd, - }; + ImportCompleteArgs arg = new ImportCompleteArgs(completedType, timeStart, timeEnd, _lastError); ImportCompleted(this, arg); } } diff --git a/source code/MySqlBackup(MySqlConnector)/EventArgs/ExportCompleteArgs.cs b/source code/MySqlBackup(MySqlConnector)/EventArgs/ExportCompleteArgs.cs index fe98744..fc542e0 100644 --- a/source code/MySqlBackup(MySqlConnector)/EventArgs/ExportCompleteArgs.cs +++ b/source code/MySqlBackup(MySqlConnector)/EventArgs/ExportCompleteArgs.cs @@ -6,12 +6,12 @@ namespace MySqlConnector { public class ExportCompleteArgs { - DateTime _timeStart, _timeEnd; - TimeSpan _timeUsed = new TimeSpan(); + MySqlBackup.ProcessEndType _completionType; + DateTime _timeStart; + DateTime _timeEnd; + TimeSpan _timeUsed; Exception _exception; - MySqlBackup.ProcessEndType _completionType = MySqlBackup.ProcessEndType.UnknownStatus; - /// /// The Starting time of export process. /// @@ -25,14 +25,14 @@ public class ExportCompleteArgs /// /// Total time used in current export process. /// - public TimeSpan TimeUsed { get { return _timeUsed;}} + public TimeSpan TimeUsed { get { return _timeUsed; } } public MySqlBackup.ProcessEndType CompletionType { get { return _completionType; } } public Exception LastError { get { return _exception; } } - public bool HasError { get { if (LastError != null) return true; return false; } } - + public bool HasError { get { if (_exception != null) return true; return false; } } + public ExportCompleteArgs(DateTime timeStart, DateTime timeEnd, MySqlBackup.ProcessEndType endType, Exception exception) { _completionType = endType; diff --git a/source code/MySqlBackup(MySqlConnector)/EventArgs/ImportCompleteArgs.cs b/source code/MySqlBackup(MySqlConnector)/EventArgs/ImportCompleteArgs.cs index 9dd6db9..8bc02bf 100644 --- a/source code/MySqlBackup(MySqlConnector)/EventArgs/ImportCompleteArgs.cs +++ b/source code/MySqlBackup(MySqlConnector)/EventArgs/ImportCompleteArgs.cs @@ -6,26 +6,26 @@ namespace MySqlConnector { public class ImportCompleteArgs { + MySqlBackup.ProcessEndType _completionType; + DateTime _timeStart; + DateTime _timeEnd; + TimeSpan _timeUsed; + Exception _exception; + /// /// The starting time of import process. /// - public DateTime TimeStart; + public DateTime TimeStart { get { return _timeStart; } } /// /// The ending time of import process. /// - public DateTime TimeEnd; + public DateTime TimeEnd { get { return _timeEnd; } } /// - /// Enum of completion type + /// The completion type of current import processs. /// - public enum CompleteType - { - UnknownStatus, - Completed, - Cancelled, - Error - } + public MySqlBackup.ProcessEndType CompleteType { get { return _completionType; } } /// /// Indicates whether the import process has error(s). @@ -35,16 +35,20 @@ public enum CompleteType /// /// The last error (exception) occur in import process. /// - public Exception LastError = null; - - // - /// The completion type of current import processs. - /// - public CompleteType CompletedType = CompleteType.Completed; + public Exception LastError { get { return _exception; } } /// /// Total time used in current import process. /// - public TimeSpan TimeUsed => TimeEnd - TimeStart; + public TimeSpan TimeUsed { get { return _timeUsed; } } + + public ImportCompleteArgs(MySqlBackup.ProcessEndType completionType, DateTime timeStart, DateTime timeEnd, Exception exception) + { + _completionType = completionType; + _timeStart = timeStart; + _timeEnd = timeEnd; + _timeUsed = timeEnd - timeStart; + _exception = exception; + } } } diff --git a/source code/MySqlBackup(MySqlConnector)/EventArgs/ImportProgressArgs.cs b/source code/MySqlBackup(MySqlConnector)/EventArgs/ImportProgressArgs.cs index fb8bfa8..30d1cf3 100644 --- a/source code/MySqlBackup(MySqlConnector)/EventArgs/ImportProgressArgs.cs +++ b/source code/MySqlBackup(MySqlConnector)/EventArgs/ImportProgressArgs.cs @@ -8,6 +8,7 @@ public class ImportProgressArgs : EventArgs { long _curBytes = 0L; long _totalBytes = 0L; + double _percentComplete = 0d; /// /// Number of processed bytes in current import process. @@ -22,12 +23,21 @@ public class ImportProgressArgs : EventArgs /// /// Percentage of completeness. /// - public int PercentageCompleted { get { return (int)(CurrentBytes *100L / TotalBytes); } } + public double PercentageCompleted { get { return _percentComplete; } } public ImportProgressArgs(long currentBytes, long totalBytes) { _curBytes = currentBytes; _totalBytes = totalBytes; + + if (currentBytes == 0L || totalBytes == 0L) + { + _percentComplete = 0d; + } + else + { + _percentComplete = (double)currentBytes / (double)totalBytes * 100d; + } } } } diff --git a/source code/MySqlBackup(MySqlConnector)/Methods/CryptoExpress.cs b/source code/MySqlBackup(MySqlConnector)/Methods/CryptoExpress.cs index 43853fd..48bb1ca 100644 --- a/source code/MySqlBackup(MySqlConnector)/Methods/CryptoExpress.cs +++ b/source code/MySqlBackup(MySqlConnector)/Methods/CryptoExpress.cs @@ -29,44 +29,44 @@ public static string ConvertByteArrayToHexString(byte[] ba) return new string(c); } - public static string RandomString(int size) - { - byte[] randBuffer = new byte[size + (10)]; - RandomNumberGenerator.Create().GetBytes(randBuffer); - return System.Convert.ToBase64String(randBuffer).Replace("/", string.Empty).Replace("+", string.Empty).Replace("=", string.Empty).Remove(size); - } + //public static string RandomString(int size) + //{ + // byte[] randBuffer = new byte[size + (10)]; + // RandomNumberGenerator.Create().GetBytes(randBuffer); + // return System.Convert.ToBase64String(randBuffer).Replace("/", string.Empty).Replace("+", string.Empty).Replace("=", string.Empty).Remove(size); + //} - public static string Sha128Hash(string input) - { - SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider(); - byte[] ba = Encoding.UTF8.GetBytes(input); - byte[] ba2 = sha.ComputeHash(ba); - sha = null; - return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); - } + //public static string Sha128Hash(string input) + //{ + // SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider(); + // byte[] ba = Encoding.UTF8.GetBytes(input); + // byte[] ba2 = sha.ComputeHash(ba); + // sha = null; + // return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); + //} - public static string Sha256Hash(string input) - { - byte[] ba = Encoding.UTF8.GetBytes(input); - return Sha256Hash(ba); - } + //public static string Sha256Hash(string input) + //{ + // byte[] ba = Encoding.UTF8.GetBytes(input); + // return Sha256Hash(ba); + //} - public static string Sha256Hash(byte[] ba) - { - SHA256Managed sha2 = new SHA256Managed(); - byte[] ba2 = sha2.ComputeHash(ba); - sha2 = null; - return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); - } + //public static string Sha256Hash(byte[] ba) + //{ + // SHA256Managed sha2 = new SHA256Managed(); + // byte[] ba2 = sha2.ComputeHash(ba); + // sha2 = null; + // return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); + //} - public static string Sha512Hash(string input) - { - byte[] ba = Encoding.UTF8.GetBytes(input); - SHA512Managed sha5 = new SHA512Managed(); - byte[] ba2 = sha5.ComputeHash(ba); - sha5 = null; - return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); - } + //public static string Sha512Hash(string input) + //{ + // byte[] ba = Encoding.UTF8.GetBytes(input); + // SHA512Managed sha5 = new SHA512Managed(); + // byte[] ba2 = sha5.ComputeHash(ba); + // sha5 = null; + // return BitConverter.ToString(ba2).Replace("-", string.Empty).ToLower(); + //} //public static string AES_Encrypt(string input, string password) //{ diff --git a/source code/MySqlBackup(MySqlConnector)/Methods/QueryExpress.cs b/source code/MySqlBackup(MySqlConnector)/Methods/QueryExpress.cs index 13fdfe6..504b1f5 100644 --- a/source code/MySqlBackup(MySqlConnector)/Methods/QueryExpress.cs +++ b/source code/MySqlBackup(MySqlConnector)/Methods/QueryExpress.cs @@ -67,8 +67,9 @@ public static string ExecuteScalarStr(MySqlCommand cmd, string sql, string colum public static long ExecuteScalarLong(MySqlCommand cmd, string sql) { + long l = 0; cmd.CommandText = sql; - long.TryParse(cmd.ExecuteScalar() + "", out var l); + long.TryParse(cmd.ExecuteScalar() + "", out l); return l; } @@ -89,37 +90,37 @@ static void escape_string(StringBuilder sb, char c) switch (c) { case '\\': // Backslash - sb.AppendFormat("\\\\"); + sb.Append("\\\\"); break; case '\0': // Null - sb.AppendFormat("\\0"); + sb.Append("\\0"); break; case '\r': // Carriage return - sb.AppendFormat("\\r"); + sb.Append("\\r"); break; case '\n': // New Line - sb.AppendFormat("\\n"); + sb.Append("\\n"); + break; + case '\a': // Vertical tab + sb.Append("\\a"); break; - //case '\a': // Vertical tab - // builder.AppendFormat("\\a"); - // break; case '\b': // Backspace - sb.AppendFormat("\\b"); + sb.Append("\\b"); + break; + case '\f': // Formfeed + sb.Append("\\f"); + break; + case '\t': // Horizontal tab + sb.Append("\\t"); + break; + case '\v': // Vertical tab + sb.Append("\\v"); break; - //case '\f': // Formfeed - // builder.AppendFormat("\\f"); - // break; - //case '\t': // Horizontal tab - // sb.AppendFormat("\\t"); - // break; - //case '\v': // Vertical tab - // builder.AppendFormat("\\v"); - // break; case '\"': // Double quotation mark - sb.AppendFormat("\\\""); + sb.Append("\\\""); break; case '\'': // Single quotation mark - sb.AppendFormat("''"); + sb.Append("''"); break; default: sb.Append(c); @@ -404,4 +405,4 @@ public static string ConvertToSqlFormat(object ob, bool wrapStringWithSingleQuot } } -} \ No newline at end of file +} diff --git a/source code/MySqlBackup(MySqlConnector)/MySqlBackup(MySqlConnector).csproj b/source code/MySqlBackup(MySqlConnector)/MySqlBackup(MySqlConnector).csproj index 7278364..47d85ea 100644 --- a/source code/MySqlBackup(MySqlConnector)/MySqlBackup(MySqlConnector).csproj +++ b/source code/MySqlBackup(MySqlConnector)/MySqlBackup(MySqlConnector).csproj @@ -1,7 +1,7 @@ - NET48;NET472;NET461;NET452;netcoreapp2.1;netcoreapp3.1;netstandard2.0;netstandard2.1 + net471;net48;net481;netstandard2.0;netstandard2.1;netcoreapp3.1;net6.0; MySqlConnector true disable @@ -12,17 +12,15 @@ A tool to backup and restore MySQL database in C#/VB.NET/ASP.NET. This library runs with MySqlConnector (MIT) Public Domain https://github.com/MySqlBackupNET/MySqlBackup.Net - logo128.png git https://github.com/MySqlBackupNET/MySqlBackup.Net - 2.3.6.2 - 2.3.6.2 - 2.3.6.2 + 2.3.7 + 2.3.7 + 2.3.7 True MySqlBackupNet.MySqlConnector logo.ico mysqlbackup;mysqlconnector - README.md @@ -30,18 +28,7 @@ - - True - - - - True - - - - - - + diff --git a/source code/MySqlBackup(MySqlConnector)/MySqlBackup.cs b/source code/MySqlBackup(MySqlConnector)/MySqlBackup.cs index 18f6215..8a34742 100644 --- a/source code/MySqlBackup(MySqlConnector)/MySqlBackup.cs +++ b/source code/MySqlBackup(MySqlConnector)/MySqlBackup.cs @@ -1385,30 +1385,21 @@ void ReportEndProcess() ReportProgress(); if (ImportCompleted != null) { - ImportCompleteArgs.CompleteType completedType; + MySqlBackup.ProcessEndType completedType = ProcessEndType.UnknownStatus; switch (processCompletionType) { case ProcessEndType.Complete: - completedType = ImportCompleteArgs.CompleteType.Completed; + completedType = MySqlBackup.ProcessEndType.Complete; break; case ProcessEndType.Error: - completedType = ImportCompleteArgs.CompleteType.Error; + completedType = MySqlBackup.ProcessEndType.Error; break; case ProcessEndType.Cancelled: - completedType = ImportCompleteArgs.CompleteType.Cancelled; - break; - default: - completedType = ImportCompleteArgs.CompleteType.UnknownStatus; + completedType = MySqlBackup.ProcessEndType.Cancelled; break; } - ImportCompleteArgs arg = new ImportCompleteArgs() - { - LastError = _lastError, - CompletedType = completedType, - TimeStart = timeStart, - TimeEnd = timeEnd, - }; + ImportCompleteArgs arg = new ImportCompleteArgs(completedType, timeStart, timeEnd, _lastError); ImportCompleted(this, arg); } } diff --git a/source code/MySqlBackup(MySqlConnector)/MySqlScript/MySqlScript.cs b/source code/MySqlBackup(MySqlConnector)/MySqlScript/MySqlScript.cs index 0ba125e..dc1e085 100644 --- a/source code/MySqlBackup(MySqlConnector)/MySqlScript/MySqlScript.cs +++ b/source code/MySqlBackup(MySqlConnector)/MySqlScript/MySqlScript.cs @@ -156,7 +156,7 @@ public int Execute() // therefore safely allow the use of user variables. no one should be using // this connection while we are using it so we can temporarily tell it // to allow the use of user variables - bool allowUserVars = true; + //bool allowUserVars = true; try { diff --git a/source code/MySqlBackup.sln b/source code/MySqlBackup.sln index 724df19..0a2529d 100644 --- a/source code/MySqlBackup.sln +++ b/source code/MySqlBackup.sln @@ -5,8 +5,6 @@ VisualStudioVersion = 17.0.31612.314 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test_ASP.NET", "Test_ASPNET\Test_ASP.NET.csproj", "{0A28DC07-B40C-4E6E-A14B-D5C0AC7E2CEA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test_WinForm", "Test_WinForm\Test_WinForm.csproj", "{0C44B679-BC54-4818-9E77-6BE2C14E680B}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test_WinForm_DevartExpress", "Test_WinForm_DevartExpress\Test_WinForm_DevartExpress.csproj", "{2D5FB34D-2552-444C-9AAE-2D01E6438551}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test_WinForm_MySqlConnector", "Test_WinForm_MySqlConnector\Test_WinForm_MySqlConnector.csproj", "{96B8C5E6-49D0-48BE-A3D6-DA479AC2409D}" @@ -17,6 +15,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MySqlBackup(MySql.Data)", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MySqlBackup(MySqlConnector)", "MySqlBackup(MySqlConnector)\MySqlBackup(MySqlConnector).csproj", "{280A4426-14CC-4A20-85F7-2F8E863A9977}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test_WinForm_MySqlData", "Test_WinForm_MySqlData\Test_WinForm_MySqlData.csproj", "{0C44B679-BC54-4818-9E77-6BE2C14E680B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -33,14 +33,6 @@ Global {0A28DC07-B40C-4E6E-A14B-D5C0AC7E2CEA}.Release|Any CPU.Build.0 = Release|Any CPU {0A28DC07-B40C-4E6E-A14B-D5C0AC7E2CEA}.ReleaseNET40_Only|Any CPU.ActiveCfg = Release|Any CPU {0A28DC07-B40C-4E6E-A14B-D5C0AC7E2CEA}.ReleaseNET40_Only|Any CPU.Build.0 = Release|Any CPU - {0C44B679-BC54-4818-9E77-6BE2C14E680B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C44B679-BC54-4818-9E77-6BE2C14E680B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C44B679-BC54-4818-9E77-6BE2C14E680B}.NET20|Any CPU.ActiveCfg = Release|Any CPU - {0C44B679-BC54-4818-9E77-6BE2C14E680B}.NET20|Any CPU.Build.0 = Release|Any CPU - {0C44B679-BC54-4818-9E77-6BE2C14E680B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C44B679-BC54-4818-9E77-6BE2C14E680B}.Release|Any CPU.Build.0 = Release|Any CPU - {0C44B679-BC54-4818-9E77-6BE2C14E680B}.ReleaseNET40_Only|Any CPU.ActiveCfg = Release|Any CPU - {0C44B679-BC54-4818-9E77-6BE2C14E680B}.ReleaseNET40_Only|Any CPU.Build.0 = Release|Any CPU {2D5FB34D-2552-444C-9AAE-2D01E6438551}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2D5FB34D-2552-444C-9AAE-2D01E6438551}.Debug|Any CPU.Build.0 = Debug|Any CPU {2D5FB34D-2552-444C-9AAE-2D01E6438551}.NET20|Any CPU.ActiveCfg = Release|Any CPU @@ -81,6 +73,14 @@ Global {280A4426-14CC-4A20-85F7-2F8E863A9977}.Release|Any CPU.Build.0 = Release|Any CPU {280A4426-14CC-4A20-85F7-2F8E863A9977}.ReleaseNET40_Only|Any CPU.ActiveCfg = Release|Any CPU {280A4426-14CC-4A20-85F7-2F8E863A9977}.ReleaseNET40_Only|Any CPU.Build.0 = Release|Any CPU + {0C44B679-BC54-4818-9E77-6BE2C14E680B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0C44B679-BC54-4818-9E77-6BE2C14E680B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0C44B679-BC54-4818-9E77-6BE2C14E680B}.NET20|Any CPU.ActiveCfg = Debug|Any CPU + {0C44B679-BC54-4818-9E77-6BE2C14E680B}.NET20|Any CPU.Build.0 = Debug|Any CPU + {0C44B679-BC54-4818-9E77-6BE2C14E680B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0C44B679-BC54-4818-9E77-6BE2C14E680B}.Release|Any CPU.Build.0 = Release|Any CPU + {0C44B679-BC54-4818-9E77-6BE2C14E680B}.ReleaseNET40_Only|Any CPU.ActiveCfg = Release|Any CPU + {0C44B679-BC54-4818-9E77-6BE2C14E680B}.ReleaseNET40_Only|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/source code/README.md b/source code/README.md new file mode 100644 index 0000000..7aecb80 --- /dev/null +++ b/source code/README.md @@ -0,0 +1,134 @@ +# About + +A tool to backup and restore MySQL database in C#/VB.NET/ASP.NET. + +Runs on MySql.Data.DLL, MySqlConnector.DLL and Devart.Express.MySql.DLL + +More documentation is available at the [Project Github website](https://github.com/MySqlBackupNET/MySqlBackup.Net). + +**For MySql.Data.DLL** +PM> Install-Package MySqlBackup.NET +[https://www.nuget.org/packages/MySqlBackup.NET/](https://www.nuget.org/packages/MySqlBackup.NET/) + +**For dotConnector Devart.Express.MySql** +PM> Install-Package MySqlBackup.Net.DevartExpress +[https://www.nuget.org/packages/MySqlBackup.Net.DevartExpress/](https://www.nuget.org/packages/MySqlBackup.Net.DevartExpress/) + +**For MySqlConnector (MIT)** +PM> Install-Package MySqlBackup.NET.MySqlConnector +[https://www.nuget.org/packages/MySqlBackup.NET.MysqlConnector/](https://www.nuget.org/packages/MySqlBackup.NET.MysqlConnector/) + +## Backup/Export a MySQL Database +```C# +string constring = "server=localhost;user=root;pwd=qwerty;database=test;convertzerodatetime=true;"; + +string file = "C:\\backup.sql"; + +using (MySqlConnection conn = new MySqlConnection(constring)) +{ + using (MySqlCommand cmd = new MySqlCommand()) + { + using (MySqlBackup mb = new MySqlBackup(cmd)) + { + cmd.Connection = conn; + conn.Open(); + mb.ExportToFile(file); + conn.Close(); + } + } +} +``` + +## Import/Restore a MySQL Database + +```C# +string constring = "server=localhost;user=root;pwd=qwerty;database=test;convertzerodatetime=true;"; + +string file = "C:\\backup.sql"; + +using (MySqlConnection conn = new MySqlConnection(constring)) +{ + using (MySqlCommand cmd = new MySqlCommand()) + { + using (MySqlBackup mb = new MySqlBackup(cmd)) + { + cmd.Connection = conn; + conn.Open(); + mb.ImportFromFile(file); + conn.Close(); + } + } +} +``` + +## Introduction + +MySqlBackup.NET is a tool (DLL) that can backup/restore MySQL database in .NET Programming Language. It is an alternative to MySqlDump. + +This tool is developed in C# but able to be used in any .NET Language (i.e. VB.NET, F#, etc.). + +Another benefit of making this tool is, we don't have to rely on two small programs - MySqlDump.exe and MySql.exe to perform the backup and restore task. We will have better control on the output result in .NET way. + +The most common way to backup a MySQL Database is by using MySqlDump and MySQL Workbench. + +MySQL Workbench is good for developers, but when comes to the client or end-user, the recommended way is to get every parameter preset and all they need to know is press the big button "Backup" and everything is done. Using MySQL Workbench as a backup tool is not a suitable solution for the client or end-user. + +On the other hand, MySqlDump.exe cannot be executed directly from the Web Server. As some providers forbid that, MySqlBackup will be helpful in building a web-based (ASP.NET) backup tool. + +## Features + +* Backup and Restore of MySQL Database +* Can be used in any .NET Languages. +* Export/Import to/from MemoryStream +* Conditional Rows Export (Filter Tables or Rows) +* Progress Report is Available for Both Export and Import Task. +* Able to export rows into different modes. (Insert, Insert Ignore, Replace, On Duplicate Key Update, Update) +* Can be used directly in ASP.NET or web services. + +## Prerequisite and Dependencies for Development, Compile and Production Usage + +MySqlBackup.NET relies on the following component to work. + +**Option 1: MySql.Data (Connector/NET)** +* [MySQL dot net Connector/Net (MySql.Data.DLL)](http://www.mysql.com/downloads/connector/net/) +* MySql.Data.DLL is developed by Oracle Corporation, licensed under GPL License (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)._ + +**Option 2: Devart Express (dotConnect)** +* [Devart dotConnect for MySQL Express](https://www.devart.com/dotconnect/mysql/) +* For license agreement, please read: [https://www.devart.com/dotconnect/mysql/licensing-faq.html](https://www.devart.com/dotconnect/mysql/licensing-faq.html) +* Devart.Data.DLL +* Devart.Data.MySql.DLL + +**Option 3: MySqlConnector (MIT)** +* [MySqlConnector: High Performance MySQL Library for .NET](https://mysqlconnector.net/) +* Project URL: https://github.com/mysql-net/MySqlConnector +* Licensed under MIT +* MySqlConnector.DLL + +## Reminder + +### Reminder 1 + +MySqlBackup.NET (or MySqlBackup.DLL) stands on top of MySql.Data.DLL which also stands on top of .NET Framework, which uses UTF8 encoding by default. +If your database involves any UTF8 or Unicode Characters. You must use a MySQL database with default character of **UTF8** while handling Unicode Characters, such as + +* Western European specific languages, the character of 'À', 'ë', 'õ', 'Ñ'. +* Russian, Hebrew, India, Arabic, Chinese, Korean, Japanese characters, etc. + +You are recommended to apply the connection string option of charset=utf8. Example: + +``` +server=localhost;user=root;pwd=mypwd;charset=utf8; +``` +or +``` +server=localhost;user=root;pwd=mypwd;charset=utf8mb4; +``` +### Reminder 2 + +(For MySql.Data connector only) +DateTime conversion between MySQL and .NET Framework. In MySQL, there are various of DateTime format, such as null value or Date only data. But, in .NET Framework, there is no null value (or Date only) for DateTime. This error is not caused by MySqlBackup.DLL. MySql.Data.DLL (developed by Oracle) has decided to throw an exception of Data Conversion Error. Therefore, you are strongly recommended to apply the connection string option of **convertzerodatetime=true**. Example: + +``` +server=localhost;user=root;pwd=mypwd;charset=utf8mb4;convertzerodatetime=true; +``` \ No newline at end of file diff --git a/source code/Test_ASPNET/Index.aspx b/source code/Test_ASPNET/Index.aspx index 9e64568..58e4888 100644 --- a/source code/Test_ASPNET/Index.aspx +++ b/source code/Test_ASPNET/Index.aspx @@ -92,7 +92,7 @@ MySqlBackup.NET is a C# open source MySQL database backup and restore tool. It is an alternative to MySqlDump. It can be used in VB.NET projects too. - Official Project Site: https://github.com/MySqlBackupNET/MySqlBackup.Net + Official Project Site: https://MySqlBackup.Net

Below is a simple demo for backing up and restoring a MySQL database: @@ -112,7 +112,7 @@ MySQL Connection String:

- Example: server=www.mywebsite.com;user=root;password=qwerty;database=test;allowzerodatetime=true;connectiontimeout=60; + Example: server=www.mywebsite.com;user=root;password=qwerty;database=test;allowzerodatetime=true;sslmode=none;

@@ -142,19 +142,12 @@ Notes:
  • All activities, inputs and outputs are not logged, saved and unable to be traced.
  • -
  • Data transmission of this website is not - protected by secure connection (https). -
    - Data sent and received in human readable clear text form without encryption. -
    - You are advised not to use the service hosted here on your real and confidential website's database. -
  • Below are some of the online FREE MySQL Hosting, you may use it for testing here.
  • The services hosted here are for testing purposes and for mini size of MySQL database only. diff --git a/source code/Test_ASPNET/Index.aspx.cs b/source code/Test_ASPNET/Index.aspx.cs index fcc5e5d..be88636 100644 --- a/source code/Test_ASPNET/Index.aspx.cs +++ b/source code/Test_ASPNET/Index.aspx.cs @@ -1,9 +1,9 @@ -using MySql.Data.MySqlClient; -using System; +using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Web.UI; +using MySqlConnector; namespace MySqlBackupASPNET { diff --git a/source code/Test_ASPNET/Test_ASP.NET.csproj b/source code/Test_ASPNET/Test_ASP.NET.csproj index e289fe6..5aca917 100644 --- a/source code/Test_ASPNET/Test_ASP.NET.csproj +++ b/source code/Test_ASPNET/Test_ASP.NET.csproj @@ -43,41 +43,27 @@ false - - ..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll - - - ..\packages\Google.Protobuf.3.18.1\lib\net45\Google.Protobuf.dll - - - ..\packages\K4os.Compression.LZ4.1.2.13\lib\net46\K4os.Compression.LZ4.dll - True - - - ..\packages\K4os.Compression.LZ4.Streams.1.2.13\lib\net46\K4os.Compression.LZ4.Streams.dll - True - - - ..\packages\MySql.Data.8.0.26\lib\net452\MySql.Data.dll - - - ..\packages\SSH.NET.2020.0.1\lib\net40\Renci.SshNet.dll + + ..\packages\MySqlConnector.2.1.13\lib\net471\MySqlConnector.dll - ..\packages\System.Buffers.4.5.1\lib\netstandard1.1\System.Buffers.dll + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + ..\packages\System.Diagnostics.DiagnosticSource.5.0.1\lib\net46\System.Diagnostics.DiagnosticSource.dll + - ..\packages\System.Memory.4.5.4\lib\netstandard1.1\System.Memory.dll + ..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll @@ -86,6 +72,9 @@ ..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll + + ..\packages\System.Threading.Tasks.Extensions.4.3.0\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll + @@ -149,9 +138,9 @@ - - {90412615-9eda-43e4-a704-ee08f5b62c5d} - MySqlBackup%28MySql.Data%29 + + {280a4426-14cc-4a20-85f7-2f8e863a9977} + MySqlBackup%28MySqlConnector%29 diff --git a/source code/Test_ASPNET/Web.config b/source code/Test_ASPNET/Web.config index a62ab0b..956e984 100644 --- a/source code/Test_ASPNET/Web.config +++ b/source code/Test_ASPNET/Web.config @@ -1,4 +1,4 @@ - + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/source code/Test_ASPNET/packages.config b/source code/Test_ASPNET/packages.config index 00c6e8e..960282d 100644 --- a/source code/Test_ASPNET/packages.config +++ b/source code/Test_ASPNET/packages.config @@ -1,14 +1,10 @@  - - - - - - - - - + + + + - + + \ No newline at end of file diff --git a/source code/Test_WinForm/packages.config b/source code/Test_WinForm/packages.config deleted file mode 100644 index a7ff2ac..0000000 --- a/source code/Test_WinForm/packages.config +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/source code/Test_WinForm_DevartExpress/App.config b/source code/Test_WinForm_DevartExpress/App.config index 53e5358..ee61b7e 100644 --- a/source code/Test_WinForm_DevartExpress/App.config +++ b/source code/Test_WinForm_DevartExpress/App.config @@ -1,7 +1,7 @@  - + @@ -13,6 +13,6 @@ - + diff --git a/source code/Test_WinForm_DevartExpress/CryptoExpress.cs b/source code/Test_WinForm_DevartExpress/CryptoExpress.cs new file mode 100644 index 0000000..276cef9 --- /dev/null +++ b/source code/Test_WinForm_DevartExpress/CryptoExpress.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Security.Cryptography; + +namespace System +{ + public class CryptoExpress + { + public static string Sha256Hash(byte[] ba) + { + byte[] ba2 = SHA256CryptoServiceProvider.Create().ComputeHash(ba); + return Convert.ToBase64String(ba2); + } + + public static string RandomString(int size) + { + byte[] randBuffer = new byte[size + (10)]; + RandomNumberGenerator.Create().GetBytes(randBuffer); + return System.Convert.ToBase64String(randBuffer).Replace("/", string.Empty).Replace("+", string.Empty).Replace("=", string.Empty).Remove(size); + } + + public static string ConvertByteArrayToHexString(byte[] ba) + { + if (ba == null || ba.Length == 0) + return ""; + // Method 1 (slower) + //return "0x"+ BitConverter.ToString(bytes).Replace("-", string.Empty); + + // Method 2 (faster) + char[] c = new char[ba.Length * 2 + 2]; + byte b; + c[0] = '0'; c[1] = 'x'; + for (int y = 0, x = 2; y < ba.Length; ++y, ++x) + { + b = ((byte)(ba[y] >> 4)); + c[x] = (char)(b > 9 ? b + 0x37 : b + 0x30); + b = ((byte)(ba[y] & 0xF)); + c[++x] = (char)(b > 9 ? b + 0x37 : b + 0x30); + } + return new string(c); + } + } +} diff --git a/source code/Test_WinForm_DevartExpress/FormCompareFile.cs b/source code/Test_WinForm_DevartExpress/FormCompareFile.cs index 667e4ed..6c9f072 100644 --- a/source code/Test_WinForm_DevartExpress/FormCompareFile.cs +++ b/source code/Test_WinForm_DevartExpress/FormCompareFile.cs @@ -43,7 +43,7 @@ bool GetHash(ref string file, ref string hash) { file = f.FileName; byte[] ba = System.IO.File.ReadAllBytes(f.FileName); - hash = System.Security.Cryptography.CryptoExpress.Sha256Hash(ba); + hash = CryptoExpress.Sha256Hash(ba); return true; } return false; diff --git a/source code/Test_WinForm_DevartExpress/FormTestViewDependencies.cs b/source code/Test_WinForm_DevartExpress/FormTestViewDependencies.cs index 1dfecd0..bc0e319 100644 --- a/source code/Test_WinForm_DevartExpress/FormTestViewDependencies.cs +++ b/source code/Test_WinForm_DevartExpress/FormTestViewDependencies.cs @@ -3,7 +3,7 @@ using System.ComponentModel; using System.Data; using System.Drawing; -using System.Linq; + using System.Text; using System.Threading.Tasks; using System.Windows.Forms; diff --git a/source code/Test_WinForm_DevartExpress/FormToolCreateSampleTable.cs b/source code/Test_WinForm_DevartExpress/FormToolCreateSampleTable.cs index 44f3746..0771366 100644 --- a/source code/Test_WinForm_DevartExpress/FormToolCreateSampleTable.cs +++ b/source code/Test_WinForm_DevartExpress/FormToolCreateSampleTable.cs @@ -1,7 +1,6 @@ using Devart.Data.MySql; using System; using System.ComponentModel; -using System.Security.Cryptography; using System.Text; using System.Windows.Forms; diff --git a/source code/Test_WinForm_DevartExpress/Program.cs b/source code/Test_WinForm_DevartExpress/Program.cs index e76fe69..498e236 100644 --- a/source code/Test_WinForm_DevartExpress/Program.cs +++ b/source code/Test_WinForm_DevartExpress/Program.cs @@ -5,8 +5,8 @@ namespace MySqlBackupTestApp { static class Program { - public static string Version = "V2.3.6"; - public static string DateVersion = "October 17, 2021"; + public static string Version = Devart.Data.MySql.MySqlBackup.Version; + public static string DateVersion = "October 18, 2022"; private static string _connectionString = string.Empty; diff --git a/source code/Test_WinForm_DevartExpress/Properties/Settings.Designer.cs b/source code/Test_WinForm_DevartExpress/Properties/Settings.Designer.cs index 7e42496..9a60c78 100644 --- a/source code/Test_WinForm_DevartExpress/Properties/Settings.Designer.cs +++ b/source code/Test_WinForm_DevartExpress/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace TestApp_DevartExpressMySql.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.0.3.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/source code/Test_WinForm_DevartExpress/Test_WinForm_DevartExpress.csproj b/source code/Test_WinForm_DevartExpress/Test_WinForm_DevartExpress.csproj index c782df9..bc95352 100644 --- a/source code/Test_WinForm_DevartExpress/Test_WinForm_DevartExpress.csproj +++ b/source code/Test_WinForm_DevartExpress/Test_WinForm_DevartExpress.csproj @@ -8,7 +8,7 @@ WinExe TestApp_DevartExpressMySql TestApp_DevartExpressMySql - v4.5.2 + v4.8 512 true true @@ -37,11 +37,11 @@ logo.ico - - ..\packages\dotConnect.Express.for.MySQL.8.19.1985\lib\Devart.Data.dll + + ..\packages\dotConnect.Express.for.MySQL.9.0.0\lib\Devart.Data.dll - - ..\packages\dotConnect.Express.for.MySQL.8.19.1985\lib\Devart.Data.MySql.dll + + ..\packages\dotConnect.Express.for.MySQL.9.0.0\lib\Devart.Data.MySql.dll @@ -56,6 +56,7 @@ + Form diff --git a/source code/Test_WinForm_DevartExpress/packages.config b/source code/Test_WinForm_DevartExpress/packages.config index 1744907..bfffe81 100644 --- a/source code/Test_WinForm_DevartExpress/packages.config +++ b/source code/Test_WinForm_DevartExpress/packages.config @@ -1,4 +1,4 @@  - + \ No newline at end of file diff --git a/source code/Test_WinForm_MySqlConnector/App.config b/source code/Test_WinForm_MySqlConnector/App.config index a45621e..765380d 100644 --- a/source code/Test_WinForm_MySqlConnector/App.config +++ b/source code/Test_WinForm_MySqlConnector/App.config @@ -1,7 +1,7 @@  - + @@ -11,7 +11,7 @@ - + @@ -19,7 +19,11 @@ - + + + + + diff --git a/source code/Test_WinForm_MySqlConnector/CryptoExpress.cs b/source code/Test_WinForm_MySqlConnector/CryptoExpress.cs new file mode 100644 index 0000000..276cef9 --- /dev/null +++ b/source code/Test_WinForm_MySqlConnector/CryptoExpress.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Security.Cryptography; + +namespace System +{ + public class CryptoExpress + { + public static string Sha256Hash(byte[] ba) + { + byte[] ba2 = SHA256CryptoServiceProvider.Create().ComputeHash(ba); + return Convert.ToBase64String(ba2); + } + + public static string RandomString(int size) + { + byte[] randBuffer = new byte[size + (10)]; + RandomNumberGenerator.Create().GetBytes(randBuffer); + return System.Convert.ToBase64String(randBuffer).Replace("/", string.Empty).Replace("+", string.Empty).Replace("=", string.Empty).Remove(size); + } + + public static string ConvertByteArrayToHexString(byte[] ba) + { + if (ba == null || ba.Length == 0) + return ""; + // Method 1 (slower) + //return "0x"+ BitConverter.ToString(bytes).Replace("-", string.Empty); + + // Method 2 (faster) + char[] c = new char[ba.Length * 2 + 2]; + byte b; + c[0] = '0'; c[1] = 'x'; + for (int y = 0, x = 2; y < ba.Length; ++y, ++x) + { + b = ((byte)(ba[y] >> 4)); + c[x] = (char)(b > 9 ? b + 0x37 : b + 0x30); + b = ((byte)(ba[y] & 0xF)); + c[++x] = (char)(b > 9 ? b + 0x37 : b + 0x30); + } + return new string(c); + } + } +} diff --git a/source code/Test_WinForm_MySqlConnector/FormCompareFile.cs b/source code/Test_WinForm_MySqlConnector/FormCompareFile.cs index 667e4ed..6c9f072 100644 --- a/source code/Test_WinForm_MySqlConnector/FormCompareFile.cs +++ b/source code/Test_WinForm_MySqlConnector/FormCompareFile.cs @@ -43,7 +43,7 @@ bool GetHash(ref string file, ref string hash) { file = f.FileName; byte[] ba = System.IO.File.ReadAllBytes(f.FileName); - hash = System.Security.Cryptography.CryptoExpress.Sha256Hash(ba); + hash = CryptoExpress.Sha256Hash(ba); return true; } return false; diff --git a/source code/Test_WinForm_MySqlConnector/FormTestViewDependencies.cs b/source code/Test_WinForm_MySqlConnector/FormTestViewDependencies.cs index 77d6635..9938a73 100644 --- a/source code/Test_WinForm_MySqlConnector/FormTestViewDependencies.cs +++ b/source code/Test_WinForm_MySqlConnector/FormTestViewDependencies.cs @@ -3,7 +3,7 @@ using System.ComponentModel; using System.Data; using System.Drawing; -using System.Linq; + using System.Text; using System.Threading.Tasks; using System.Windows.Forms; diff --git a/source code/Test_WinForm_MySqlConnector/FormToolCreateSampleTable.cs b/source code/Test_WinForm_MySqlConnector/FormToolCreateSampleTable.cs index 84879b9..e6e1b53 100644 --- a/source code/Test_WinForm_MySqlConnector/FormToolCreateSampleTable.cs +++ b/source code/Test_WinForm_MySqlConnector/FormToolCreateSampleTable.cs @@ -1,7 +1,6 @@ using MySqlConnector; using System; using System.ComponentModel; -using System.Security.Cryptography; using System.Text; using System.Windows.Forms; diff --git a/source code/Test_WinForm_MySqlConnector/Program.cs b/source code/Test_WinForm_MySqlConnector/Program.cs index e76fe69..00f19e6 100644 --- a/source code/Test_WinForm_MySqlConnector/Program.cs +++ b/source code/Test_WinForm_MySqlConnector/Program.cs @@ -1,12 +1,13 @@ -using System; +using MySqlConnector; +using System; using System.Windows.Forms; namespace MySqlBackupTestApp { static class Program { - public static string Version = "V2.3.6"; - public static string DateVersion = "October 17, 2021"; + public static string Version = MySqlBackup.Version; + public static string DateVersion = "October 18, 2022"; private static string _connectionString = string.Empty; diff --git a/source code/Test_WinForm_MySqlConnector/Properties/Resources.Designer.cs b/source code/Test_WinForm_MySqlConnector/Properties/Resources.Designer.cs index 5c29f7e..b58081d 100644 --- a/source code/Test_WinForm_MySqlConnector/Properties/Resources.Designer.cs +++ b/source code/Test_WinForm_MySqlConnector/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Test_WinForm_MySqlConnector.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/source code/Test_WinForm_MySqlConnector/Properties/Settings.Designer.cs b/source code/Test_WinForm_MySqlConnector/Properties/Settings.Designer.cs index 24ca71b..2ba7e83 100644 --- a/source code/Test_WinForm_MySqlConnector/Properties/Settings.Designer.cs +++ b/source code/Test_WinForm_MySqlConnector/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace Test_WinForm_MySqlConnector.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/source code/Test_WinForm_MySqlConnector/Test_WinForm_MySqlConnector.csproj b/source code/Test_WinForm_MySqlConnector/Test_WinForm_MySqlConnector.csproj index db20301..538b74d 100644 --- a/source code/Test_WinForm_MySqlConnector/Test_WinForm_MySqlConnector.csproj +++ b/source code/Test_WinForm_MySqlConnector/Test_WinForm_MySqlConnector.csproj @@ -8,7 +8,7 @@ WinExe Test_WinForm_MySqlConnector Test_WinForm_MySqlConnector - v4.5.2 + v4.8 512 true true @@ -40,29 +40,29 @@ logo.ico - - ..\packages\MySqlConnector.1.3.13\lib\net45\MySqlConnector.dll + + ..\packages\MySqlConnector.2.1.13\lib\net471\MySqlConnector.dll - ..\packages\System.Buffers.4.5.1\lib\netstandard1.1\System.Buffers.dll + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - ..\packages\System.Memory.4.5.4\lib\netstandard1.1\System.Memory.dll + + ..\packages\System.Diagnostics.DiagnosticSource.6.0.0\lib\net461\System.Diagnostics.DiagnosticSource.dll + + + ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll - ..\packages\System.Numerics.Vectors.4.5.0\lib\portable-net45+win8+wp8+wpa81\System.Numerics.Vectors.dll - - - ..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll @@ -76,6 +76,7 @@ + Form diff --git a/source code/Test_WinForm_MySqlConnector/packages.config b/source code/Test_WinForm_MySqlConnector/packages.config index fe07994..f8ec547 100644 --- a/source code/Test_WinForm_MySqlConnector/packages.config +++ b/source code/Test_WinForm_MySqlConnector/packages.config @@ -1,12 +1,10 @@  - - - - - - - - - + + + + + + + \ No newline at end of file diff --git a/source code/Test_WinForm_MySqlData/CryptoExpress.cs b/source code/Test_WinForm_MySqlData/CryptoExpress.cs new file mode 100644 index 0000000..276cef9 --- /dev/null +++ b/source code/Test_WinForm_MySqlData/CryptoExpress.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Security.Cryptography; + +namespace System +{ + public class CryptoExpress + { + public static string Sha256Hash(byte[] ba) + { + byte[] ba2 = SHA256CryptoServiceProvider.Create().ComputeHash(ba); + return Convert.ToBase64String(ba2); + } + + public static string RandomString(int size) + { + byte[] randBuffer = new byte[size + (10)]; + RandomNumberGenerator.Create().GetBytes(randBuffer); + return System.Convert.ToBase64String(randBuffer).Replace("/", string.Empty).Replace("+", string.Empty).Replace("=", string.Empty).Remove(size); + } + + public static string ConvertByteArrayToHexString(byte[] ba) + { + if (ba == null || ba.Length == 0) + return ""; + // Method 1 (slower) + //return "0x"+ BitConverter.ToString(bytes).Replace("-", string.Empty); + + // Method 2 (faster) + char[] c = new char[ba.Length * 2 + 2]; + byte b; + c[0] = '0'; c[1] = 'x'; + for (int y = 0, x = 2; y < ba.Length; ++y, ++x) + { + b = ((byte)(ba[y] >> 4)); + c[x] = (char)(b > 9 ? b + 0x37 : b + 0x30); + b = ((byte)(ba[y] & 0xF)); + c[++x] = (char)(b > 9 ? b + 0x37 : b + 0x30); + } + return new string(c); + } + } +} diff --git a/source code/Test_WinForm/FormAbout.Designer.cs b/source code/Test_WinForm_MySqlData/FormAbout.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormAbout.Designer.cs rename to source code/Test_WinForm_MySqlData/FormAbout.Designer.cs diff --git a/source code/Test_WinForm/FormAbout.cs b/source code/Test_WinForm_MySqlData/FormAbout.cs similarity index 100% rename from source code/Test_WinForm/FormAbout.cs rename to source code/Test_WinForm_MySqlData/FormAbout.cs diff --git a/source code/Test_WinForm/FormAbout.resx b/source code/Test_WinForm_MySqlData/FormAbout.resx similarity index 100% rename from source code/Test_WinForm/FormAbout.resx rename to source code/Test_WinForm_MySqlData/FormAbout.resx diff --git a/source code/Test_WinForm/FormCompareFile.Designer.cs b/source code/Test_WinForm_MySqlData/FormCompareFile.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormCompareFile.Designer.cs rename to source code/Test_WinForm_MySqlData/FormCompareFile.Designer.cs diff --git a/source code/Test_WinForm/FormCompareFile.cs b/source code/Test_WinForm_MySqlData/FormCompareFile.cs similarity index 96% rename from source code/Test_WinForm/FormCompareFile.cs rename to source code/Test_WinForm_MySqlData/FormCompareFile.cs index 667e4ed..fcc9e9f 100644 --- a/source code/Test_WinForm/FormCompareFile.cs +++ b/source code/Test_WinForm_MySqlData/FormCompareFile.cs @@ -1,5 +1,6 @@ using System; using System.Drawing; +using System.Security.Cryptography; using System.Windows.Forms; namespace MySqlBackupTestApp @@ -43,7 +44,8 @@ bool GetHash(ref string file, ref string hash) { file = f.FileName; byte[] ba = System.IO.File.ReadAllBytes(f.FileName); - hash = System.Security.Cryptography.CryptoExpress.Sha256Hash(ba); + hash = System.CryptoExpress.Sha256Hash(ba); + return true; } return false; diff --git a/source code/Test_WinForm/FormCompareFile.resx b/source code/Test_WinForm_MySqlData/FormCompareFile.resx similarity index 100% rename from source code/Test_WinForm/FormCompareFile.resx rename to source code/Test_WinForm_MySqlData/FormCompareFile.resx diff --git a/source code/Test_WinForm/FormConnStringBuilder.Designer.cs b/source code/Test_WinForm_MySqlData/FormConnStringBuilder.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormConnStringBuilder.Designer.cs rename to source code/Test_WinForm_MySqlData/FormConnStringBuilder.Designer.cs diff --git a/source code/Test_WinForm/FormConnStringBuilder.cs b/source code/Test_WinForm_MySqlData/FormConnStringBuilder.cs similarity index 100% rename from source code/Test_WinForm/FormConnStringBuilder.cs rename to source code/Test_WinForm_MySqlData/FormConnStringBuilder.cs diff --git a/source code/Test_WinForm/FormConnStringBuilder.resx b/source code/Test_WinForm_MySqlData/FormConnStringBuilder.resx similarity index 100% rename from source code/Test_WinForm/FormConnStringBuilder.resx rename to source code/Test_WinForm_MySqlData/FormConnStringBuilder.resx diff --git a/source code/Test_WinForm/FormDatabaseInfo.Designer.cs b/source code/Test_WinForm_MySqlData/FormDatabaseInfo.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormDatabaseInfo.Designer.cs rename to source code/Test_WinForm_MySqlData/FormDatabaseInfo.Designer.cs diff --git a/source code/Test_WinForm/FormDatabaseInfo.cs b/source code/Test_WinForm_MySqlData/FormDatabaseInfo.cs similarity index 100% rename from source code/Test_WinForm/FormDatabaseInfo.cs rename to source code/Test_WinForm_MySqlData/FormDatabaseInfo.cs diff --git a/source code/Test_WinForm/FormDatabaseInfo.resx b/source code/Test_WinForm_MySqlData/FormDatabaseInfo.resx similarity index 100% rename from source code/Test_WinForm/FormDatabaseInfo.resx rename to source code/Test_WinForm_MySqlData/FormDatabaseInfo.resx diff --git a/source code/Test_WinForm/FormDecryptOldDumpFile.Designer.cs b/source code/Test_WinForm_MySqlData/FormDecryptOldDumpFile.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormDecryptOldDumpFile.Designer.cs rename to source code/Test_WinForm_MySqlData/FormDecryptOldDumpFile.Designer.cs diff --git a/source code/Test_WinForm/FormDecryptOldDumpFile.cs b/source code/Test_WinForm_MySqlData/FormDecryptOldDumpFile.cs similarity index 100% rename from source code/Test_WinForm/FormDecryptOldDumpFile.cs rename to source code/Test_WinForm_MySqlData/FormDecryptOldDumpFile.cs diff --git a/source code/Test_WinForm/FormDecryptOldDumpFile.resx b/source code/Test_WinForm_MySqlData/FormDecryptOldDumpFile.resx similarity index 100% rename from source code/Test_WinForm/FormDecryptOldDumpFile.resx rename to source code/Test_WinForm_MySqlData/FormDecryptOldDumpFile.resx diff --git a/source code/Test_WinForm/FormDumpFileViewer.Designer.cs b/source code/Test_WinForm_MySqlData/FormDumpFileViewer.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormDumpFileViewer.Designer.cs rename to source code/Test_WinForm_MySqlData/FormDumpFileViewer.Designer.cs diff --git a/source code/Test_WinForm/FormDumpFileViewer.cs b/source code/Test_WinForm_MySqlData/FormDumpFileViewer.cs similarity index 100% rename from source code/Test_WinForm/FormDumpFileViewer.cs rename to source code/Test_WinForm_MySqlData/FormDumpFileViewer.cs diff --git a/source code/Test_WinForm/FormDumpFileViewer.resx b/source code/Test_WinForm_MySqlData/FormDumpFileViewer.resx similarity index 100% rename from source code/Test_WinForm/FormDumpFileViewer.resx rename to source code/Test_WinForm_MySqlData/FormDumpFileViewer.resx diff --git a/source code/Test_WinForm/FormMain.Designer.cs b/source code/Test_WinForm_MySqlData/FormMain.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormMain.Designer.cs rename to source code/Test_WinForm_MySqlData/FormMain.Designer.cs diff --git a/source code/Test_WinForm/FormMain.cs b/source code/Test_WinForm_MySqlData/FormMain.cs similarity index 100% rename from source code/Test_WinForm/FormMain.cs rename to source code/Test_WinForm_MySqlData/FormMain.cs diff --git a/source code/Test_WinForm/FormMain.resx b/source code/Test_WinForm_MySqlData/FormMain.resx similarity index 100% rename from source code/Test_WinForm/FormMain.resx rename to source code/Test_WinForm_MySqlData/FormMain.resx diff --git a/source code/Test_WinForm/FormQueryBrowser.Designer.cs b/source code/Test_WinForm_MySqlData/FormQueryBrowser.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormQueryBrowser.Designer.cs rename to source code/Test_WinForm_MySqlData/FormQueryBrowser.Designer.cs diff --git a/source code/Test_WinForm/FormQueryBrowser.cs b/source code/Test_WinForm_MySqlData/FormQueryBrowser.cs similarity index 100% rename from source code/Test_WinForm/FormQueryBrowser.cs rename to source code/Test_WinForm_MySqlData/FormQueryBrowser.cs diff --git a/source code/Test_WinForm/FormQueryBrowser.resx b/source code/Test_WinForm_MySqlData/FormQueryBrowser.resx similarity index 100% rename from source code/Test_WinForm/FormQueryBrowser.resx rename to source code/Test_WinForm_MySqlData/FormQueryBrowser.resx diff --git a/source code/Test_WinForm/FormQueryBrowser2.Designer.cs b/source code/Test_WinForm_MySqlData/FormQueryBrowser2.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormQueryBrowser2.Designer.cs rename to source code/Test_WinForm_MySqlData/FormQueryBrowser2.Designer.cs diff --git a/source code/Test_WinForm/FormQueryBrowser2.cs b/source code/Test_WinForm_MySqlData/FormQueryBrowser2.cs similarity index 100% rename from source code/Test_WinForm/FormQueryBrowser2.cs rename to source code/Test_WinForm_MySqlData/FormQueryBrowser2.cs diff --git a/source code/Test_WinForm/FormQueryBrowser2.resx b/source code/Test_WinForm_MySqlData/FormQueryBrowser2.resx similarity index 100% rename from source code/Test_WinForm/FormQueryBrowser2.resx rename to source code/Test_WinForm_MySqlData/FormQueryBrowser2.resx diff --git a/source code/Test_WinForm/FormReference.Designer.cs b/source code/Test_WinForm_MySqlData/FormReference.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormReference.Designer.cs rename to source code/Test_WinForm_MySqlData/FormReference.Designer.cs diff --git a/source code/Test_WinForm/FormReference.cs b/source code/Test_WinForm_MySqlData/FormReference.cs similarity index 100% rename from source code/Test_WinForm/FormReference.cs rename to source code/Test_WinForm_MySqlData/FormReference.cs diff --git a/source code/Test_WinForm/FormReference.resx b/source code/Test_WinForm_MySqlData/FormReference.resx similarity index 100% rename from source code/Test_WinForm/FormReference.resx rename to source code/Test_WinForm_MySqlData/FormReference.resx diff --git a/source code/Test_WinForm/FormTestBlob.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestBlob.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestBlob.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestBlob.Designer.cs diff --git a/source code/Test_WinForm/FormTestBlob.cs b/source code/Test_WinForm_MySqlData/FormTestBlob.cs similarity index 100% rename from source code/Test_WinForm/FormTestBlob.cs rename to source code/Test_WinForm_MySqlData/FormTestBlob.cs diff --git a/source code/Test_WinForm/FormTestBlob.resx b/source code/Test_WinForm_MySqlData/FormTestBlob.resx similarity index 100% rename from source code/Test_WinForm/FormTestBlob.resx rename to source code/Test_WinForm_MySqlData/FormTestBlob.resx diff --git a/source code/Test_WinForm/FormTestCustomTablesExport.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestCustomTablesExport.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestCustomTablesExport.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestCustomTablesExport.Designer.cs diff --git a/source code/Test_WinForm/FormTestCustomTablesExport.cs b/source code/Test_WinForm_MySqlData/FormTestCustomTablesExport.cs similarity index 100% rename from source code/Test_WinForm/FormTestCustomTablesExport.cs rename to source code/Test_WinForm_MySqlData/FormTestCustomTablesExport.cs diff --git a/source code/Test_WinForm/FormTestCustomTablesExport.resx b/source code/Test_WinForm_MySqlData/FormTestCustomTablesExport.resx similarity index 100% rename from source code/Test_WinForm/FormTestCustomTablesExport.resx rename to source code/Test_WinForm_MySqlData/FormTestCustomTablesExport.resx diff --git a/source code/Test_WinForm/FormTestEncryptDecrypt.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestEncryptDecrypt.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestEncryptDecrypt.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestEncryptDecrypt.Designer.cs diff --git a/source code/Test_WinForm/FormTestEncryptDecrypt.cs b/source code/Test_WinForm_MySqlData/FormTestEncryptDecrypt.cs similarity index 100% rename from source code/Test_WinForm/FormTestEncryptDecrypt.cs rename to source code/Test_WinForm_MySqlData/FormTestEncryptDecrypt.cs diff --git a/source code/Test_WinForm/FormTestEncryptDecrypt.resx b/source code/Test_WinForm_MySqlData/FormTestEncryptDecrypt.resx similarity index 100% rename from source code/Test_WinForm/FormTestEncryptDecrypt.resx rename to source code/Test_WinForm_MySqlData/FormTestEncryptDecrypt.resx diff --git a/source code/Test_WinForm/FormTestExImWithOptions.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestExImWithOptions.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestExImWithOptions.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestExImWithOptions.Designer.cs diff --git a/source code/Test_WinForm/FormTestExImWithOptions.cs b/source code/Test_WinForm_MySqlData/FormTestExImWithOptions.cs similarity index 100% rename from source code/Test_WinForm/FormTestExImWithOptions.cs rename to source code/Test_WinForm_MySqlData/FormTestExImWithOptions.cs diff --git a/source code/Test_WinForm/FormTestExImWithOptions.resx b/source code/Test_WinForm_MySqlData/FormTestExImWithOptions.resx similarity index 100% rename from source code/Test_WinForm/FormTestExImWithOptions.resx rename to source code/Test_WinForm_MySqlData/FormTestExImWithOptions.resx diff --git a/source code/Test_WinForm/FormTestExcludeTables.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestExcludeTables.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestExcludeTables.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestExcludeTables.Designer.cs diff --git a/source code/Test_WinForm/FormTestExcludeTables.cs b/source code/Test_WinForm_MySqlData/FormTestExcludeTables.cs similarity index 100% rename from source code/Test_WinForm/FormTestExcludeTables.cs rename to source code/Test_WinForm_MySqlData/FormTestExcludeTables.cs diff --git a/source code/Test_WinForm/FormTestExcludeTables.resx b/source code/Test_WinForm_MySqlData/FormTestExcludeTables.resx similarity index 100% rename from source code/Test_WinForm/FormTestExcludeTables.resx rename to source code/Test_WinForm_MySqlData/FormTestExcludeTables.resx diff --git a/source code/Test_WinForm/FormTestExportImportMemory.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestExportImportMemory.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestExportImportMemory.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestExportImportMemory.Designer.cs diff --git a/source code/Test_WinForm/FormTestExportImportMemory.cs b/source code/Test_WinForm_MySqlData/FormTestExportImportMemory.cs similarity index 100% rename from source code/Test_WinForm/FormTestExportImportMemory.cs rename to source code/Test_WinForm_MySqlData/FormTestExportImportMemory.cs diff --git a/source code/Test_WinForm/FormTestExportImportMemory.resx b/source code/Test_WinForm_MySqlData/FormTestExportImportMemory.resx similarity index 100% rename from source code/Test_WinForm/FormTestExportImportMemory.resx rename to source code/Test_WinForm_MySqlData/FormTestExportImportMemory.resx diff --git a/source code/Test_WinForm/FormTestExportImportString.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestExportImportString.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestExportImportString.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestExportImportString.Designer.cs diff --git a/source code/Test_WinForm/FormTestExportImportString.cs b/source code/Test_WinForm_MySqlData/FormTestExportImportString.cs similarity index 100% rename from source code/Test_WinForm/FormTestExportImportString.cs rename to source code/Test_WinForm_MySqlData/FormTestExportImportString.cs diff --git a/source code/Test_WinForm/FormTestExportImportString.resx b/source code/Test_WinForm_MySqlData/FormTestExportImportString.resx similarity index 100% rename from source code/Test_WinForm/FormTestExportImportString.resx rename to source code/Test_WinForm_MySqlData/FormTestExportImportString.resx diff --git a/source code/Test_WinForm/FormTestExportProgresBar.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestExportProgresBar.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestExportProgresBar.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestExportProgresBar.Designer.cs diff --git a/source code/Test_WinForm/FormTestExportProgresBar.cs b/source code/Test_WinForm_MySqlData/FormTestExportProgresBar.cs similarity index 100% rename from source code/Test_WinForm/FormTestExportProgresBar.cs rename to source code/Test_WinForm_MySqlData/FormTestExportProgresBar.cs diff --git a/source code/Test_WinForm/FormTestExportProgresBar.resx b/source code/Test_WinForm_MySqlData/FormTestExportProgresBar.resx similarity index 100% rename from source code/Test_WinForm/FormTestExportProgresBar.resx rename to source code/Test_WinForm_MySqlData/FormTestExportProgresBar.resx diff --git a/source code/Test_WinForm/FormTestImportCaptureError.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestImportCaptureError.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestImportCaptureError.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestImportCaptureError.Designer.cs diff --git a/source code/Test_WinForm/FormTestImportCaptureError.cs b/source code/Test_WinForm_MySqlData/FormTestImportCaptureError.cs similarity index 100% rename from source code/Test_WinForm/FormTestImportCaptureError.cs rename to source code/Test_WinForm_MySqlData/FormTestImportCaptureError.cs diff --git a/source code/Test_WinForm/FormTestImportCaptureError.resx b/source code/Test_WinForm_MySqlData/FormTestImportCaptureError.resx similarity index 100% rename from source code/Test_WinForm/FormTestImportCaptureError.resx rename to source code/Test_WinForm_MySqlData/FormTestImportCaptureError.resx diff --git a/source code/Test_WinForm/FormTestImportProgressReport.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestImportProgressReport.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestImportProgressReport.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestImportProgressReport.Designer.cs diff --git a/source code/Test_WinForm/FormTestImportProgressReport.cs b/source code/Test_WinForm_MySqlData/FormTestImportProgressReport.cs similarity index 100% rename from source code/Test_WinForm/FormTestImportProgressReport.cs rename to source code/Test_WinForm_MySqlData/FormTestImportProgressReport.cs diff --git a/source code/Test_WinForm/FormTestImportProgressReport.resx b/source code/Test_WinForm_MySqlData/FormTestImportProgressReport.resx similarity index 100% rename from source code/Test_WinForm/FormTestImportProgressReport.resx rename to source code/Test_WinForm_MySqlData/FormTestImportProgressReport.resx diff --git a/source code/Test_WinForm/FormTestModifyHeadersFooters.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestModifyHeadersFooters.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestModifyHeadersFooters.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestModifyHeadersFooters.Designer.cs diff --git a/source code/Test_WinForm/FormTestModifyHeadersFooters.cs b/source code/Test_WinForm_MySqlData/FormTestModifyHeadersFooters.cs similarity index 100% rename from source code/Test_WinForm/FormTestModifyHeadersFooters.cs rename to source code/Test_WinForm_MySqlData/FormTestModifyHeadersFooters.cs diff --git a/source code/Test_WinForm/FormTestModifyHeadersFooters.resx b/source code/Test_WinForm_MySqlData/FormTestModifyHeadersFooters.resx similarity index 100% rename from source code/Test_WinForm/FormTestModifyHeadersFooters.resx rename to source code/Test_WinForm_MySqlData/FormTestModifyHeadersFooters.resx diff --git a/source code/Test_WinForm/FormTestSimple.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestSimple.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestSimple.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestSimple.Designer.cs diff --git a/source code/Test_WinForm/FormTestSimple.cs b/source code/Test_WinForm_MySqlData/FormTestSimple.cs similarity index 100% rename from source code/Test_WinForm/FormTestSimple.cs rename to source code/Test_WinForm_MySqlData/FormTestSimple.cs diff --git a/source code/Test_WinForm/FormTestSimple.resx b/source code/Test_WinForm_MySqlData/FormTestSimple.resx similarity index 100% rename from source code/Test_WinForm/FormTestSimple.resx rename to source code/Test_WinForm_MySqlData/FormTestSimple.resx diff --git a/source code/Test_WinForm/FormTestViewDependencies.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestViewDependencies.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestViewDependencies.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestViewDependencies.Designer.cs diff --git a/source code/Test_WinForm/FormTestViewDependencies.cs b/source code/Test_WinForm_MySqlData/FormTestViewDependencies.cs similarity index 99% rename from source code/Test_WinForm/FormTestViewDependencies.cs rename to source code/Test_WinForm_MySqlData/FormTestViewDependencies.cs index 7f83304..77824d4 100644 --- a/source code/Test_WinForm/FormTestViewDependencies.cs +++ b/source code/Test_WinForm_MySqlData/FormTestViewDependencies.cs @@ -3,7 +3,7 @@ using System.ComponentModel; using System.Data; using System.Drawing; -using System.Linq; + using System.Text; using System.Threading.Tasks; using System.Windows.Forms; diff --git a/source code/Test_WinForm/FormTestViewDependencies.resx b/source code/Test_WinForm_MySqlData/FormTestViewDependencies.resx similarity index 100% rename from source code/Test_WinForm/FormTestViewDependencies.resx rename to source code/Test_WinForm_MySqlData/FormTestViewDependencies.resx diff --git a/source code/Test_WinForm/FormTestZip.Designer.cs b/source code/Test_WinForm_MySqlData/FormTestZip.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormTestZip.Designer.cs rename to source code/Test_WinForm_MySqlData/FormTestZip.Designer.cs diff --git a/source code/Test_WinForm/FormTestZip.cs b/source code/Test_WinForm_MySqlData/FormTestZip.cs similarity index 100% rename from source code/Test_WinForm/FormTestZip.cs rename to source code/Test_WinForm_MySqlData/FormTestZip.cs diff --git a/source code/Test_WinForm/FormTestZip.resx b/source code/Test_WinForm_MySqlData/FormTestZip.resx similarity index 100% rename from source code/Test_WinForm/FormTestZip.resx rename to source code/Test_WinForm_MySqlData/FormTestZip.resx diff --git a/source code/Test_WinForm/FormToolCreateSampleTable.Designer.cs b/source code/Test_WinForm_MySqlData/FormToolCreateSampleTable.Designer.cs similarity index 100% rename from source code/Test_WinForm/FormToolCreateSampleTable.Designer.cs rename to source code/Test_WinForm_MySqlData/FormToolCreateSampleTable.Designer.cs diff --git a/source code/Test_WinForm/FormToolCreateSampleTable.cs b/source code/Test_WinForm_MySqlData/FormToolCreateSampleTable.cs similarity index 99% rename from source code/Test_WinForm/FormToolCreateSampleTable.cs rename to source code/Test_WinForm_MySqlData/FormToolCreateSampleTable.cs index 9895b62..039f044 100644 --- a/source code/Test_WinForm/FormToolCreateSampleTable.cs +++ b/source code/Test_WinForm_MySqlData/FormToolCreateSampleTable.cs @@ -1,7 +1,6 @@ using MySql.Data.MySqlClient; using System; using System.ComponentModel; -using System.Security.Cryptography; using System.Text; using System.Windows.Forms; diff --git a/source code/Test_WinForm/FormToolCreateSampleTable.resx b/source code/Test_WinForm_MySqlData/FormToolCreateSampleTable.resx similarity index 100% rename from source code/Test_WinForm/FormToolCreateSampleTable.resx rename to source code/Test_WinForm_MySqlData/FormToolCreateSampleTable.resx diff --git a/source code/Test_WinForm/HtmlExpress.cs b/source code/Test_WinForm_MySqlData/HtmlExpress.cs similarity index 100% rename from source code/Test_WinForm/HtmlExpress.cs rename to source code/Test_WinForm_MySqlData/HtmlExpress.cs diff --git a/source code/Test_WinForm/Program.cs b/source code/Test_WinForm_MySqlData/Program.cs similarity index 93% rename from source code/Test_WinForm/Program.cs rename to source code/Test_WinForm_MySqlData/Program.cs index e76fe69..e7f60d5 100644 --- a/source code/Test_WinForm/Program.cs +++ b/source code/Test_WinForm_MySqlData/Program.cs @@ -1,12 +1,13 @@ using System; using System.Windows.Forms; +using MySql.Data.MySqlClient; namespace MySqlBackupTestApp { static class Program { - public static string Version = "V2.3.6"; - public static string DateVersion = "October 17, 2021"; + public static string Version = MySqlBackup.Version; + public static string DateVersion = "October 18, 2022"; private static string _connectionString = string.Empty; diff --git a/source code/Test_WinForm/Properties/AssemblyInfo.cs b/source code/Test_WinForm_MySqlData/Properties/AssemblyInfo.cs similarity index 100% rename from source code/Test_WinForm/Properties/AssemblyInfo.cs rename to source code/Test_WinForm_MySqlData/Properties/AssemblyInfo.cs diff --git a/source code/Test_WinForm/Properties/Resources.Designer.cs b/source code/Test_WinForm_MySqlData/Properties/Resources.Designer.cs similarity index 98% rename from source code/Test_WinForm/Properties/Resources.Designer.cs rename to source code/Test_WinForm_MySqlData/Properties/Resources.Designer.cs index 784ccd8..0ea4f56 100644 --- a/source code/Test_WinForm/Properties/Resources.Designer.cs +++ b/source code/Test_WinForm_MySqlData/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace MySqlBackupTestApp.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/source code/Test_WinForm/Properties/Resources.resx b/source code/Test_WinForm_MySqlData/Properties/Resources.resx similarity index 100% rename from source code/Test_WinForm/Properties/Resources.resx rename to source code/Test_WinForm_MySqlData/Properties/Resources.resx diff --git a/source code/Test_WinForm/Properties/Settings.Designer.cs b/source code/Test_WinForm_MySqlData/Properties/Settings.Designer.cs similarity index 97% rename from source code/Test_WinForm/Properties/Settings.Designer.cs rename to source code/Test_WinForm_MySqlData/Properties/Settings.Designer.cs index 80b9636..b2a77c7 100644 --- a/source code/Test_WinForm/Properties/Settings.Designer.cs +++ b/source code/Test_WinForm_MySqlData/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace MySqlBackupTestApp.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.3.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/source code/Test_WinForm/Properties/Settings.settings b/source code/Test_WinForm_MySqlData/Properties/Settings.settings similarity index 100% rename from source code/Test_WinForm/Properties/Settings.settings rename to source code/Test_WinForm_MySqlData/Properties/Settings.settings diff --git a/source code/Test_WinForm/Resources/bullet_cross.png b/source code/Test_WinForm_MySqlData/Resources/bullet_cross.png similarity index 100% rename from source code/Test_WinForm/Resources/bullet_cross.png rename to source code/Test_WinForm_MySqlData/Resources/bullet_cross.png diff --git a/source code/Test_WinForm/Resources/disk.png b/source code/Test_WinForm_MySqlData/Resources/disk.png similarity index 100% rename from source code/Test_WinForm/Resources/disk.png rename to source code/Test_WinForm_MySqlData/Resources/disk.png diff --git a/source code/Test_WinForm/Resources/disk_edit.png b/source code/Test_WinForm_MySqlData/Resources/disk_edit.png similarity index 100% rename from source code/Test_WinForm/Resources/disk_edit.png rename to source code/Test_WinForm_MySqlData/Resources/disk_edit.png diff --git a/source code/Test_WinForm/Resources/folder.png b/source code/Test_WinForm_MySqlData/Resources/folder.png similarity index 100% rename from source code/Test_WinForm/Resources/folder.png rename to source code/Test_WinForm_MySqlData/Resources/folder.png diff --git a/source code/Test_WinForm/Resources/logo128.png b/source code/Test_WinForm_MySqlData/Resources/logo128.png similarity index 100% rename from source code/Test_WinForm/Resources/logo128.png rename to source code/Test_WinForm_MySqlData/Resources/logo128.png diff --git a/source code/Test_WinForm/Resources/q2.png b/source code/Test_WinForm_MySqlData/Resources/q2.png similarity index 100% rename from source code/Test_WinForm/Resources/q2.png rename to source code/Test_WinForm_MySqlData/Resources/q2.png diff --git a/source code/Test_WinForm/Test_WinForm.csproj b/source code/Test_WinForm_MySqlData/Test_WinForm_MySqlData.csproj similarity index 89% rename from source code/Test_WinForm/Test_WinForm.csproj rename to source code/Test_WinForm_MySqlData/Test_WinForm_MySqlData.csproj index 465d651..2cfafde 100644 --- a/source code/Test_WinForm/Test_WinForm.csproj +++ b/source code/Test_WinForm_MySqlData/Test_WinForm_MySqlData.csproj @@ -9,7 +9,7 @@ Properties MySqlBackupTestApp MySqlBackupTestApp - v4.5.2 + v4.8 512 @@ -54,28 +54,28 @@ logo.ico - - ..\packages\BouncyCastle.1.8.5\lib\BouncyCastle.Crypto.dll + + ..\packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll - - ..\packages\Google.Protobuf.3.14.0\lib\net45\Google.Protobuf.dll + + ..\packages\Google.Protobuf.3.21.7\lib\net45\Google.Protobuf.dll - - ..\packages\K4os.Compression.LZ4.1.1.11\lib\net45\K4os.Compression.LZ4.dll + + ..\packages\K4os.Compression.LZ4.1.2.16\lib\net46\K4os.Compression.LZ4.dll - - ..\packages\K4os.Compression.LZ4.Streams.1.1.11\lib\net45\K4os.Compression.LZ4.Streams.dll + + ..\packages\K4os.Compression.LZ4.Streams.1.2.16\lib\net46\K4os.Compression.LZ4.Streams.dll - - ..\packages\K4os.Hash.xxHash.1.0.6\lib\net45\K4os.Hash.xxHash.dll + + ..\packages\K4os.Hash.xxHash.1.0.7\lib\net46\K4os.Hash.xxHash.dll - - ..\packages\MySql.Data.8.0.26\lib\net452\MySql.Data.dll + + ..\packages\MySql.Data.8.0.31\lib\net48\MySql.Data.dll - ..\packages\System.Buffers.4.5.1\lib\netstandard1.1\System.Buffers.dll + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll @@ -86,24 +86,25 @@ - - ..\packages\System.Memory.4.5.3\lib\netstandard1.1\System.Memory.dll + + ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll - - ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - - ..\packages\MySql.Data.8.0.26\lib\net452\Ubiety.Dns.Core.dll - - - ..\packages\MySql.Data.8.0.26\lib\net452\Zstandard.Net.dll + + ..\packages\MySql.Data.8.0.31\lib\net48\ZstdNet.dll + Form diff --git a/source code/Test_WinForm/ZipStorer.cs b/source code/Test_WinForm_MySqlData/ZipStorer.cs similarity index 100% rename from source code/Test_WinForm/ZipStorer.cs rename to source code/Test_WinForm_MySqlData/ZipStorer.cs diff --git a/source code/Test_WinForm/app.config b/source code/Test_WinForm_MySqlData/app.config similarity index 57% rename from source code/Test_WinForm/app.config rename to source code/Test_WinForm_MySqlData/app.config index 70c280b..3c9e43a 100644 --- a/source code/Test_WinForm/app.config +++ b/source code/Test_WinForm_MySqlData/app.config @@ -1,39 +1,43 @@ - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + diff --git a/source code/Test_WinForm/logo.ico b/source code/Test_WinForm_MySqlData/logo.ico similarity index 100% rename from source code/Test_WinForm/logo.ico rename to source code/Test_WinForm_MySqlData/logo.ico diff --git a/source code/Test_WinForm_MySqlData/packages.config b/source code/Test_WinForm_MySqlData/packages.config new file mode 100644 index 0000000..84f15b4 --- /dev/null +++ b/source code/Test_WinForm_MySqlData/packages.config @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file