通过C#可靠地删除SQL Server 2008上的数据库

Kon*_*nos 7 c# sql-server-2008

我目前正在尝试通过以下代码删除数据库

using Microsoft.SqlServer.Management.Smo;

var server = new Server(Server);
server.KillAllProcesses("Db");
server.KillDatabase("Db");
Run Code Online (Sandbox Code Playgroud)

有时它有效,但其他我得到以下异常:

Microsoft.SqlServer.Management.Smo.FailedOperationException:杀死服务器'Host1'的数据库失败.
---> Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行Transact-SQL语句或批处理时发生异常.
---> System.Data.SqlClient.SqlException:此时无法更改数据库'Db'的状态或选项.数据库处于单用户模式,用户当前已连接到该用户.

有关如何通过代码可靠地删除数据库的任何想法?

Ser*_*lov 4

要通过 SMO 可靠地删除数据库,调用server.KillDatabase("Db");. MSDN确实声明KillDatabase会丢弃活动连接,即使它们的示例有点误导。

KillDatabase问题ALTER DATABASE [Db] SET SINGLE_USER WITH ROLLBACK IMMEDIATE然后DROP DATABASEKillAllProcesses列出所有连接,并将每个进程作为一个单独的批次进行杀死;假设是异步的,当将数据库设置为单用户模式KillAllProcesses后发生终止时,会抛出异常。KillDatabase