插入语句期间出现异常后无法删除 SQL 数据库
Can't Drop SQL Database After Exception During Insert Statement
我 运行 遇到了我正在处理的应用程序的问题。这是正在发生的事情的细分。
- 通过代码创建新数据库(成功)
- 连接到新创建的数据库并创建表(也成功)
- 正在将数据插入到先前创建的表中(失败并出现 异常)
- 向用户显示错误消息
- 在 master 数据库上打开一个新连接
- 删除步骤 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 到池的连接并且单独使用是不够的。
我 运行 遇到了我正在处理的应用程序的问题。这是正在发生的事情的细分。
- 通过代码创建新数据库(成功)
- 连接到新创建的数据库并创建表(也成功)
- 正在将数据插入到先前创建的表中(失败并出现 异常)
- 向用户显示错误消息
- 在 master 数据库上打开一个新连接
- 删除步骤 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 到池的连接并且单独使用是不够的。