我正在尝试从.NET代码中删除SQL Server数据库。我已经尝试过使用SMO类,但是有一个例外,说数据库正在使用中。
然后我尝试执行一个查询(打开一个SqlConnection,执行一个SqlCommand),顺序如下:
ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE
(暂停)
DROP DATABASE foo
但我仍然得到一个例外,说数据库正在使用中。
我该怎么做? (或者,SQL Server Management Studio如何实现Drop数据库并关闭现有连接?)
答案 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保持连接打开。因此,即使您没有使用给定的连接字符串主动运行查询,连接仍可能是打开的。