关闭所有与数据库的连接以进行常规访问

Mos*_*026 -1 c# sql-server-2008

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

如果我想恢复我的bak文件,由于活动连接,会发生一个异常,即无法对数据库进行exlusive访问以进行恢复.所以我应该杀死Connection进行恢复!

更新1: 使用代码块在我的代码句柄中的所有连接

using (SqlConnection con = new SqlConnection(BaseModule.ConnectionString))
                {
                   //Code
                }
Run Code Online (Sandbox Code Playgroud)

但我已经打开了连接

更新2:我的问题由此代码解决:

ALTER DATABASE [dbName]
SET OFFLINE WITH ROLLBACK IMMEDIATE

ALTER DATABASE [dbName]
SET ONLINE
Run Code Online (Sandbox Code Playgroud)

但杀死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());
        }
Run Code Online (Sandbox Code Playgroud)

Dam*_*ian 5

试试这个:

use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER
Run Code Online (Sandbox Code Playgroud)

另外,看看这里:

如何终止与SQL Server 2005数据库的所有当前连接?