如何以编程方式从.NET代码中删除SQL Server数据库

时间:2010-03-19 03:51:13

标签: sql sql-server-2005

我正在尝试从.NET代码中删除SQL Server数据库。我已经尝试过使用SMO类,但是有一个例外,说数据库正在使用中。

然后我尝试执行一个查询(打开一个SqlConnection,执行一个SqlCommand),顺序如下:

ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE

(暂停)

DROP DATABASE foo

但我仍然得到一个例外,说数据库正在使用中。

我该怎么做? (或者,SQL Server Management Studio如何实现Drop数据库并关闭现有连接?)

2 个答案:

答案 0 :(得分:5)

您需要确保从主数据库中执行此操作:

USE master
GO

ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

DROP DATABASE foo
GO

应该有效。顺便说一句,SQL Server Management Studio允许您查看它为GUI中的所有命令生成的脚本。例如,在“删除”窗口中,顶部有一个“脚本”菜单项,它会显示您可以使用的脚本。

答案 1 :(得分:3)

这可能是一个愚蠢的问题,但在您的连接字符串中,您是要连接到要删除的数据库,还是连接到同一服务器上的Master数据库?如果你试图删除你主动连接的数据库,它肯定会解释错误。

另外,请记住,ADO.NET使用connection pooling保持连接打开。因此,即使您没有使用给定的连接字符串主动运行查询,连接仍可能是打开的。