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; } } } }