私のアプリケーションでは、必要に応じて開いたり閉じたりする非常に多くの接続がありますが、それらのいくつかは完全に閉じていない可能性があります! データベースの復元やその他の目的でデータベースへの排他的アクセスが必要な場合
bak ファイルを復元したい場合、接続がアクティブであるため、復元のためにデータベースに排他的にアクセスできないという例外が発生します。したがって、復元するには Connection を強制終了する必要があります。
更新 1: コード ブロックを使用してコード ハンドル内のすべての接続
using (SqlConnection con = new SqlConnection(BaseModule.ConnectionString))
{
//Code
}
しかし、すでに接続を開いています
更新 2:私の問題 このコードで解決:
ALTER DATABASE [dbName]
SET OFFLINE WITH ROLLBACK IMMEDIATE
ALTER DATABASE [dbName]
SET ONLINE
しかし、 Active Connection を殺すのは良い方法ですか? ネットワークで動作するプログラムでデータが失われる可能性がありますか?
更新 3:
bak ファイル コードの復元:
try
{
Restore objRestore = new Restore();
ServerConnection con;
con = new ServerConnection("(local)", BaseModule.dbUserName, BaseModule.dbPassWord);
Server srv = new Server(con);
objRestore.Database = BaseModule.dbName;
objRestore.Action = RestoreActionType.Database;
objRestore.Devices.AddDevice(dialogOpen.FileName, DeviceType.File);
this.progressRestore.Value = 0;
this.progressRestore.Maximum = 100;
this.progressRestore.Value = 100;
objRestore.PercentCompleteNotification = 10;
objRestore.ReplaceDatabase = true;
objRestore.PercentComplete += new PercentCompleteEventHandler(objRestore_PercentComplete);
objRestore.SqlRestore(srv);
MessageBox.Show("Completed");
}
catch (Exception exp)
{
MessageBox.Show("Error Occured" + exp.InnerException.ToString());
}