-1

私のアプリケーションでは、必要に応じて開いたり閉じたりする非常に多くの接続がありますが、それらのいくつかは完全に閉じていない可能性があります! データベースの復元やその他の目的でデータベースへの排他的アクセスが必要な場合

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());
        }
4

1 に答える 1

5

これを試して:

use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER

また、ここを見てください:

SQL Server 2005 データベースへの現在の接続をすべて終了するにはどうすればよいですか?

于 2012-11-09T12:44:01.307 に答える