Implemented database backups and restores into the AdvertisingProfitControlData DLL and added a form, DatabaseRecovery, to manage the backups and restores. Updated the installer to include the data DLL file into the install bundle.
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
using System.Data.SqlClient;
|
||||
|
||||
namespace AdvertisingProfitControlData
|
||||
{
|
||||
public class Restore
|
||||
{
|
||||
public string ErrorMessage = string.Empty;
|
||||
|
||||
public bool SingleFileRestore(string databaseFilePath)
|
||||
{
|
||||
var sqlConStrBuilder = new SqlConnectionStringBuilder(AdvertisingProfitControlDbContext.ConnectionString);
|
||||
|
||||
try
|
||||
{
|
||||
using (var conn = new SqlConnection(sqlConStrBuilder.ConnectionString))
|
||||
{
|
||||
var query = $"RESTORE DATABASE {sqlConStrBuilder.InitialCatalog} FROM DISK='{databaseFilePath}'";
|
||||
|
||||
conn.Open();
|
||||
var useMasterCommand = new SqlCommand("USE master", conn);
|
||||
useMasterCommand.ExecuteNonQuery();
|
||||
|
||||
var alter1Cmd = new SqlCommand($"ALTER DATABASE {sqlConStrBuilder.InitialCatalog} SET Single_User WITH Rollback Immediate", conn);
|
||||
alter1Cmd.ExecuteNonQuery();
|
||||
|
||||
var restoreCmd = new SqlCommand(query, conn);
|
||||
restoreCmd.ExecuteNonQuery();
|
||||
|
||||
var alter2Cmd = new SqlCommand($"ALTER DATABASE {sqlConStrBuilder.InitialCatalog} SET Multi_User", conn);
|
||||
alter2Cmd.ExecuteNonQuery();
|
||||
conn.Close();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (SqlException e)
|
||||
{
|
||||
ErrorMessage = e.Message;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user