50 lines
1.9 KiB
C#
50 lines
1.9 KiB
C#
using System.Data.SqlClient;
|
|
|
|
namespace AdvertisingProfitControlData
|
|
{
|
|
public class Restore
|
|
{
|
|
public string ErrorMessage = string.Empty;
|
|
|
|
public bool SingleFileRestore(string databaseFilePath, string connectionString)
|
|
{
|
|
var sqlConStrBuilder = new SqlConnectionStringBuilder(connectionString);
|
|
try
|
|
{
|
|
using (var conn = new SqlConnection(connectionString))
|
|
{
|
|
var query =
|
|
@"BEGIN TRY
|
|
use master
|
|
ALTER DATABASE " + sqlConStrBuilder.InitialCatalog + @" SET SINGLE_USER
|
|
DROP DATABASE AdvertisingProfitControl
|
|
RESTORE DATABASE " + sqlConStrBuilder.InitialCatalog + @" FROM Disk='" + databaseFilePath + @"' with checksum
|
|
END TRY
|
|
BEGIN CATCH
|
|
DECLARE @Error VARCHAR(max)
|
|
SELECT @Error = ERROR_MESSAGE()
|
|
ALTER DATABASE " + sqlConStrBuilder.InitialCatalog + @" SET MULTI_USER
|
|
RAISERROR(@Error, 11, 1)
|
|
END CATCH
|
|
ALTER DATABASE " + sqlConStrBuilder.InitialCatalog + @" SET MULTI_USER
|
|
";
|
|
//TODO: Verify that the database is good with DBCC command.
|
|
conn.Open();
|
|
var restoreCmd = new SqlCommand(query, conn)
|
|
{
|
|
CommandTimeout = 300
|
|
};
|
|
restoreCmd.ExecuteNonQuery();
|
|
conn.Close();
|
|
return true;
|
|
}
|
|
}
|
|
catch (SqlException e)
|
|
{
|
|
ErrorMessage = e.Message;
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|