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)
试试这个:
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数据库的所有当前连接?
| 归档时间: |
|
| 查看次数: |
3040 次 |
| 最近记录: |