在我的应用程序中,我有很多连接可以根据需要打开和关闭,但其中一些可能没有完全关闭!如果我出于恢复数据库或其他目标等原因需要独占访问数据库
如果我想恢复我的 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());
}