插入语句期间出现异常后无法删除 SQL 数据库

Can't Drop SQL Database After Exception During Insert Statement

我 运行 遇到了我正在处理的应用程序的问题。这是正在发生的事情的细分。

  1. 通过代码创建新数据库(成功)
  2. 连接到新创建的数据库并创建表(也成功)
  3. 正在将数据插入到先前创建的表中(失败并出现 异常
  4. 向用户显示错误消息
  5. master 数据库上打开一个新连接
  6. 删除步骤 1 中创建的数据库

第 6 步失败,原因如下:

System.Data.SqlClient.SqlException: Cannot drop database "ImportFail" because it is currently in use.

如果您有未关闭的连接或在要删除的数据库上使用连接,则错误消息有点有意义,但据我所知情况并非如此。

我进入 SQL Server Management Studio 并查看是什么阻止了 drop 语句。 Spid 52 似乎被 53 阻止。然而,53 是在步骤 1 中创建数据库的 DDL 语句 - 无疑成功了。

数据库的创建和随后的插入语句(或我们代码库中的任何 SqlCommand)正在通过以下方法进行。我不明白为什么即使出现异常,任何连接也会在这里徘徊。

例外后加SqlConnection.ClearAllPools();。此静态方法将物理关闭并删除池连接,该连接持有数据库上的共享锁,以防止数据库被删除。

请注意,closing/disposing 连接仅 returns 到池的连接并且单独使用是不够的。