Fixed a bug that caused the ModifyRecord form to crash on load if the cursor was over the top left hand header cell. Set a timeout for the restore SQL statement to hopefully prevent a timeout exception from being thrown. Minor code clean up.

This commit is contained in:
2018-04-04 01:47:02 -05:00
parent 65dd82cd31
commit f2fe8c592f
10 changed files with 45 additions and 62 deletions
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyVersion("1.0.0.1")]
[assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.1")]
+19 -32
View File
@@ -1,5 +1,4 @@
using System.Data; using System.Data.SqlClient;
using System.Data.SqlClient;
namespace AdvertisingProfitControlData namespace AdvertisingProfitControlData
{ {
@@ -14,39 +13,27 @@ namespace AdvertisingProfitControlData
{ {
using (var conn = new SqlConnection(connectionString)) using (var conn = new SqlConnection(connectionString))
{ {
// var db = new AdvertisingProfitControlDbContext();
//Drop the database to make sure it can be recreated and restored (necessary since the database MUST be on line for its file to be wiped from disk).
//if (db.Database.Connection.State == ConnectionState.Open)
//{
// db.Database.Connection.Close();
//}
var query = var query =
@"BEGIN TRY @"BEGIN TRY
DECLARE @DefaultDataPath varchar(max) use master
DECLARE @DefaultLogPath varchar(max) ALTER DATABASE " + sqlConStrBuilder.InitialCatalog + @" SET SINGLE_USER
SELECT @DefaultDataPath = CONVERT(varchar(max),SERVERPROPERTY('INSTANCEDEFAULTDATAPATH')) DROP DATABASE AdvertisingProfitControl
SELECT @DefaultLogPath = CONVERT(varchar(max),SERVERPROPERTY('INSTANCEDEFAULTLOGPATH')) RESTORE DATABASE " + sqlConStrBuilder.InitialCatalog + @" FROM Disk='" + databaseFilePath + @"' with checksum
SELECT @DefaultDataPath = CONCAT(@DefaultDataPath, N'" + sqlConStrBuilder.InitialCatalog + @".mdf') END TRY
SELECT @DefaultLogPath = CONCAT(@DefaultLogPath, N'" + sqlConStrBuilder.InitialCatalog + @".ldf') BEGIN CATCH
IF db_id(N'" + sqlConStrBuilder.InitialCatalog + @"') IS NOT NULL DECLARE @Error VARCHAR(max)
BEGIN SELECT @Error = ERROR_MESSAGE()
ALTER DATABASE " + sqlConStrBuilder.InitialCatalog + @" SET SINGLE_USER WITH ROLLBACK IMMEDIATE ALTER DATABASE " + sqlConStrBuilder.InitialCatalog + @" SET MULTI_USER
DROP DATABASE " + sqlConStrBuilder.InitialCatalog + @" RAISERROR(@Error, 11, 1)
CREATE DATABASE " + sqlConStrBuilder.InitialCatalog + @" END CATCH
END ALTER DATABASE " + sqlConStrBuilder.InitialCatalog + @" SET MULTI_USER
RESTORE DATABASE " + sqlConStrBuilder.InitialCatalog + @" FROM DISK ='" + databaseFilePath + @"' WITH CHECKSUM, REPLACE, ";
MOVE '" + sqlConStrBuilder.InitialCatalog + @"' TO @DefaultDataPath,
MOVE '" + sqlConStrBuilder.InitialCatalog + @"_log' TO @DefaultLogPath
END TRY
BEGIN CATCH
ALTER DATABASE " + sqlConStrBuilder.InitialCatalog + @" SET MULTI_USER
DECLARE @Error varchar(max)
SELECT @Error = ERROR_MESSAGE()
RAISERROR(@Error, 11, 1)
END CATCH";
//TODO: Verify that the database is good with DBCC command. //TODO: Verify that the database is good with DBCC command.
conn.Open(); conn.Open();
var restoreCmd = new SqlCommand(query, conn); var restoreCmd = new SqlCommand(query, conn)
{
CommandTimeout = 300
};
restoreCmd.ExecuteNonQuery(); restoreCmd.ExecuteNonQuery();
conn.Close(); conn.Close();
return true; return true;
@@ -8,7 +8,7 @@
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AdvertsingProfitControl</RootNamespace> <RootNamespace>AdvertsingProfitControl</RootNamespace>
<AssemblyName>AdvertsingProfitControl</AssemblyName> <AssemblyName>AdvertisingProfitControl</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<TargetFrameworkProfile /> <TargetFrameworkProfile />
+2 -2
View File
@@ -92,7 +92,7 @@ namespace AdvertsingProfitControl
} }
} }
if (backup.SingleFileBackup(customBackupLocation)) if (backup.SingleFileBackup(Properties.Settings.Default.ConnectionString, customBackupLocation))
{ {
//Check the state of the backup. //Check the state of the backup.
if (backup.State == 0) if (backup.State == 0)
@@ -196,7 +196,7 @@ namespace AdvertsingProfitControl
return; return;
} }
if (restore.SingleFileRestore(restoreLocationTextBox.Text, Properties.Settings.Default.DefaultServer)) if (restore.SingleFileRestore(restoreLocationTextBox.Text, Properties.Settings.Default.ConnectionString))
{ {
restoreResultLabel.Text = @"Successfully restored the database."; restoreResultLabel.Text = @"Successfully restored the database.";
restoreLocationTextBox.Text = string.Empty; restoreLocationTextBox.Text = string.Empty;
+7 -17
View File
@@ -41,7 +41,6 @@
this.informationLabel = new System.Windows.Forms.Label(); this.informationLabel = new System.Windows.Forms.Label();
this.mainMenu = new System.Windows.Forms.MenuStrip(); this.mainMenu = new System.Windows.Forms.MenuStrip();
this.databaseToolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.databaseToolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.backupRestoreMainMenu = new System.Windows.Forms.ToolStripMenuItem();
this.checkIntegrityToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.checkIntegrityToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.mainMenu.SuspendLayout(); this.mainMenu.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
@@ -70,7 +69,7 @@
// //
this.connectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.connectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.connectButton.Location = new System.Drawing.Point(421, 257); this.connectButton.Location = new System.Drawing.Point(421, 257);
this.connectButton.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); this.connectButton.Margin = new System.Windows.Forms.Padding(5);
this.connectButton.Name = "connectButton"; this.connectButton.Name = "connectButton";
this.connectButton.Size = new System.Drawing.Size(128, 35); this.connectButton.Size = new System.Drawing.Size(128, 35);
this.connectButton.TabIndex = 5; this.connectButton.TabIndex = 5;
@@ -87,7 +86,7 @@
"Windows Authentication", "Windows Authentication",
"SQL Server Authentication"}); "SQL Server Authentication"});
this.authenticationTypeComboBox.Location = new System.Drawing.Point(146, 108); this.authenticationTypeComboBox.Location = new System.Drawing.Point(146, 108);
this.authenticationTypeComboBox.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.authenticationTypeComboBox.Margin = new System.Windows.Forms.Padding(2);
this.authenticationTypeComboBox.MaxDropDownItems = 5; this.authenticationTypeComboBox.MaxDropDownItems = 5;
this.authenticationTypeComboBox.Name = "authenticationTypeComboBox"; this.authenticationTypeComboBox.Name = "authenticationTypeComboBox";
this.authenticationTypeComboBox.Size = new System.Drawing.Size(230, 28); this.authenticationTypeComboBox.Size = new System.Drawing.Size(230, 28);
@@ -117,7 +116,7 @@
// //
this.loginTextBox.Enabled = false; this.loginTextBox.Enabled = false;
this.loginTextBox.Location = new System.Drawing.Point(146, 163); this.loginTextBox.Location = new System.Drawing.Point(146, 163);
this.loginTextBox.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.loginTextBox.Margin = new System.Windows.Forms.Padding(2);
this.loginTextBox.Name = "loginTextBox"; this.loginTextBox.Name = "loginTextBox";
this.loginTextBox.Size = new System.Drawing.Size(230, 26); this.loginTextBox.Size = new System.Drawing.Size(230, 26);
this.loginTextBox.TabIndex = 3; this.loginTextBox.TabIndex = 3;
@@ -126,7 +125,7 @@
// //
this.passwordTextBox.Enabled = false; this.passwordTextBox.Enabled = false;
this.passwordTextBox.Location = new System.Drawing.Point(146, 216); this.passwordTextBox.Location = new System.Drawing.Point(146, 216);
this.passwordTextBox.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.passwordTextBox.Margin = new System.Windows.Forms.Padding(2);
this.passwordTextBox.Name = "passwordTextBox"; this.passwordTextBox.Name = "passwordTextBox";
this.passwordTextBox.PasswordChar = '*'; this.passwordTextBox.PasswordChar = '*';
this.passwordTextBox.RightToLeft = System.Windows.Forms.RightToLeft.No; this.passwordTextBox.RightToLeft = System.Windows.Forms.RightToLeft.No;
@@ -137,7 +136,7 @@
// //
this.serverNameComboBox.FormattingEnabled = true; this.serverNameComboBox.FormattingEnabled = true;
this.serverNameComboBox.Location = new System.Drawing.Point(146, 53); this.serverNameComboBox.Location = new System.Drawing.Point(146, 53);
this.serverNameComboBox.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); this.serverNameComboBox.Margin = new System.Windows.Forms.Padding(2);
this.serverNameComboBox.Name = "serverNameComboBox"; this.serverNameComboBox.Name = "serverNameComboBox";
this.serverNameComboBox.Size = new System.Drawing.Size(371, 28); this.serverNameComboBox.Size = new System.Drawing.Size(371, 28);
this.serverNameComboBox.TabIndex = 1; this.serverNameComboBox.TabIndex = 1;
@@ -166,23 +165,15 @@
// databaseToolsToolStripMenuItem // databaseToolsToolStripMenuItem
// //
this.databaseToolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.databaseToolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.backupRestoreMainMenu,
this.checkIntegrityToolStripMenuItem}); this.checkIntegrityToolStripMenuItem});
this.databaseToolsToolStripMenuItem.Name = "databaseToolsToolStripMenuItem"; this.databaseToolsToolStripMenuItem.Name = "databaseToolsToolStripMenuItem";
this.databaseToolsToolStripMenuItem.Size = new System.Drawing.Size(144, 29); this.databaseToolsToolStripMenuItem.Size = new System.Drawing.Size(144, 29);
this.databaseToolsToolStripMenuItem.Text = "&Database Tools"; this.databaseToolsToolStripMenuItem.Text = "&Database Tools";
// //
// backupRestoreMainMenu
//
this.backupRestoreMainMenu.Name = "backupRestoreMainMenu";
this.backupRestoreMainMenu.Size = new System.Drawing.Size(252, 30);
this.backupRestoreMainMenu.Text = "&Backup and Restore";
this.backupRestoreMainMenu.Click += new System.EventHandler(this.backupRestoreToolStripMenuItem_Click);
//
// checkIntegrityToolStripMenuItem // checkIntegrityToolStripMenuItem
// //
this.checkIntegrityToolStripMenuItem.Name = "checkIntegrityToolStripMenuItem"; this.checkIntegrityToolStripMenuItem.Name = "checkIntegrityToolStripMenuItem";
this.checkIntegrityToolStripMenuItem.Size = new System.Drawing.Size(252, 30); this.checkIntegrityToolStripMenuItem.Size = new System.Drawing.Size(214, 30);
this.checkIntegrityToolStripMenuItem.Text = "&Check Integrity"; this.checkIntegrityToolStripMenuItem.Text = "&Check Integrity";
this.checkIntegrityToolStripMenuItem.Click += new System.EventHandler(this.checkIntegrityToolStripMenuItem_Click); this.checkIntegrityToolStripMenuItem.Click += new System.EventHandler(this.checkIntegrityToolStripMenuItem_Click);
// //
@@ -206,7 +197,7 @@
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.mainMenu; this.MainMenuStrip = this.mainMenu;
this.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); this.Margin = new System.Windows.Forms.Padding(5);
this.MaximizeBox = false; this.MaximizeBox = false;
this.Name = "FrmLoginForm"; this.Name = "FrmLoginForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
@@ -231,7 +222,6 @@
private System.Windows.Forms.Label informationLabel; private System.Windows.Forms.Label informationLabel;
private System.Windows.Forms.MenuStrip mainMenu; private System.Windows.Forms.MenuStrip mainMenu;
private System.Windows.Forms.ToolStripMenuItem databaseToolsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem databaseToolsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem backupRestoreMainMenu;
private System.Windows.Forms.ToolStripMenuItem checkIntegrityToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem checkIntegrityToolStripMenuItem;
} }
} }
-1
View File
@@ -513,7 +513,6 @@ namespace AdvertsingProfitControl
decimal totalSales = 0; decimal totalSales = 0;
decimal totalProfitReturn = 0; decimal totalProfitReturn = 0;
var projections = db.Projections.Where(x => x.WeekEndingDate.Id == dateRecord.Id).Select(x => x).OrderBy(x => x.RowPosition); var projections = db.Projections.Where(x => x.WeekEndingDate.Id == dateRecord.Id).Select(x => x).OrderBy(x => x.RowPosition);
foreach (var p in projections) foreach (var p in projections)
{ {
projectionsDataGridView.Rows.Add(); projectionsDataGridView.Rows.Add();
+8 -1
View File
@@ -84,7 +84,6 @@ namespace AdvertsingProfitControl
InitializeForm(); InitializeForm();
mainTabControl.TabPages.Remove(mainTabControl.TabPages[4]); mainTabControl.TabPages.Remove(mainTabControl.TabPages[4]);
Text = @"Modify Record (Current Record: " + date.ToShortDateString() + @")"; Text = @"Modify Record (Current Record: " + date.ToShortDateString() + @")";
_isModifyingRecord = true;
LoadDate(date); LoadDate(date);
} }
@@ -2728,6 +2727,14 @@ out double beginningBinCount, out string _))
public void InitializeForm() public void InitializeForm()
{ {
//Apply a little nonsense fix for a but that occurs with the DataGridView control where if a cursor
//is placed over the top left hand header cell, it causes an InvalidOperationException. This mainly
//effects this form when its overloaded constructor is called since the mouse cursor is right on top
//of the aforementioned cell after clicking the "Modify Existing Record" menu option on the main form.
//More info one the bug here https://stackoverflow.com/questions/34344499/invalidoperationexception-this-operation-cannot-be-performed-while-an-auto-fill
//The following fix is applied to the projections DataGridView since its the first grid displayed to the user.
//The fix is simple however, force the form to create the cell as follows:
var projectionsLeftHeaderCell = projectionsDataGridView.TopLeftHeaderCell;
var db = new AdvertisingProfitControlDbContext(); var db = new AdvertisingProfitControlDbContext();
weekEndingCalendar.BoldedDates = db.WeekEndingDates.Select(zdate => zdate.EndingDate).ToArray(); weekEndingCalendar.BoldedDates = db.WeekEndingDates.Select(zdate => zdate.EndingDate).ToArray();
weekEndingCalendar.DateChanged += ValidateDateChanged; weekEndingCalendar.DateChanged += ValidateDateChanged;
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.5.*")] [assembly: AssemblyVersion("3.7.0.0")]
[assembly: AssemblyFileVersion("3.5.1.0")] [assembly: AssemblyFileVersion("3.7.0.0")]
+1 -1
View File
@@ -54,7 +54,7 @@ namespace AdvertsingProfitControl
} }
catch (IOException e) catch (IOException e)
{ {
Logger.WriteLog(DateTime.Now, "Generate Full Report", e.Message, Level.Error);
} }
finally finally
{ {
+1 -1
View File
@@ -109,7 +109,7 @@
<File Source="$(var.SolutionDir)AdvertsingProfitControl\ssleay32.dll"/> <File Source="$(var.SolutionDir)AdvertsingProfitControl\ssleay32.dll"/>
</Component> </Component>
<Component Id="wkhtmltox0"> <Component Id="wkhtmltox0">
<File Source="$(var.SolutionDir)AdvertsingProfitControl\wkhtmltox0.dll"/> <File Source="$(var.SolutionDir)AdvertsingProfitControl\wkhtmltox0.dll" xml:lang="en-us"/>
</Component> </Component>
<Component Id="Spire"> <Component Id="Spire">
<File Source="$(var.SolutionDir)\packages\FreeSpire.PDF.3.2\lib\net40\Spire.License.dll"/> <File Source="$(var.SolutionDir)\packages\FreeSpire.PDF.3.2\lib\net40\Spire.License.dll"/>