【发布时间】:2017-05-08 06:24:06
【问题描述】:
我目前正在尝试通过以下代码删除数据库
using Microsoft.SqlServer.Management.Smo;
var server = new Server(Server);
server.KillAllProcesses("Db");
server.KillDatabase("Db");
有时它有效,但其他我得到以下异常:
Microsoft.SqlServer.Management.Smo.FailedOperationException:为服务器“Host1”杀死数据库失败。
---> Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行 Transact-SQL 语句或批。
---> System.Data.SqlClient.SqlException:此时无法更改数据库“Db”的状态或选项。数据库处于单用户模式,并且当前有一个用户连接到它。
关于如何通过代码可靠地删除数据库的任何想法?
【问题讨论】:
-
你先尝试
ALTER DATABASE Db SET MULTI_USER;了吗? -
我个人不会为此使用 SMO,主要是因为我不知道那些
Kill...()函数的确切作用。我宁愿说USE master; ALTER DATABASE Db SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE Db; -
默认情况下数据库未设置为 SingleUser,我认为 KillDatabase 方法的失败尝试将其转换为 Single User 然后就这样离开了。
-
在使用 KillDatabase 时运行分析器。这就是我得到的(除其他外)。 ALTER DATABASE [Db] SET SINGLE_USER WITH ROLLBACK IMMEDIATE .... DROP DATABASE [Db]
-
那么,究竟是如何解决的呢?我遇到了同样的问题,除了我使用 SQL Server Express 2005?从历史上看,我使用过这种方法 (stackoverflow.com/questions/5170429/…),我发现它只比
Server.KillDatabase稍微可靠一点。但是,DROP方法也不是 100% 可靠的。康斯坦丁是如何解决这个问题的?
标签: c# sql-server-2008