在我的应用程序中,我有如此多的连接,需要打开和关闭,但也许其中一些不完全关闭!如果我因为恢复数据库或其他目标等原因需要独占访问数据库
如果我想恢复我的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());
}
答案 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?