-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

但这是杀死活动连接的好方法吗?是否会导致在网络中运行的程序中丢失数据?

更新 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 回答