关闭所有数据库连接以进行独占访问

时间:2012-11-09 12:41:45

标签: c# sql-server-2008

在我的应用程序中,我有如此多的连接,需要打开和关闭,但也许其中一些不完全关闭!如果我因为恢复数据库或其他目标等原因需要独占访问数据库

如果我想恢复我的bak文件,由于活动连接,会发生一个异常,即无法对数据库进行exlusive访问以进行恢复。所以我应该杀死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());
        }

1 个答案:

答案 0 :(得分:5)

试试这个:

use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER

另外,请看一下:

How do you kill all current connections to a SQL Server 2005 database?