Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';在Insert语句期间发生异常后,不能删除SQL数据库_C#_Sql Server_Sqlclient - Fatal编程技术网

C# Can';在Insert语句期间发生异常后,不能删除SQL数据库

C# Can';在Insert语句期间发生异常后,不能删除SQL数据库,c#,sql-server,sqlclient,C#,Sql Server,Sqlclient,我正在处理的应用程序遇到了问题。下面是正在发生的事情的细目 通过代码创建新数据库(成功) 连接到新创建的数据库并创建表(也成功) 将数据插入以前创建的表(此操作失败,出现异常) 向用户显示错误消息 在主数据库上打开一个新连接 删除在步骤1中创建的数据库 由于以下原因,步骤6失败: System.Data.SqlClient.SqlException:无法删除数据库“ImportFail”,因为它当前正在使用中 如果您有未关闭的连接或使用了要删除的数据库上的连接,则错误消息有点意义,但据我所知,情

我正在处理的应用程序遇到了问题。下面是正在发生的事情的细目

  • 通过代码创建新数据库(成功)
  • 连接到新创建的数据库并创建表(也成功)
  • 将数据插入以前创建的表(此操作失败,出现异常)
  • 向用户显示错误消息
  • 在主数据库上打开一个新连接
  • 删除在步骤1中创建的数据库
  • 由于以下原因,步骤6失败:

    System.Data.SqlClient.SqlException:无法删除数据库“ImportFail”,因为它当前正在使用中

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

    我走进SQLServerManagementStudio,查看了是什么阻止了drop语句。Spid 52似乎被53阻塞。53然而,在步骤1中创建数据库的DDL语句无疑是成功的

    数据库和后续insert语句(或我们的代码库中的任何
    SqlCommand
    )的创建将通过以下方法进行。我不明白为什么任何连接会在这里徘徊,即使是在例外情况下


    添加
    SqlConnection.clearlallpools()在异常之后。此静态方法将物理关闭并删除池连接,池连接持有数据库上到期的共享锁,以防止数据库被丢弃


    请注意,关闭/处理连接只会返回到池的连接,单靠它是不够的。

    Add
    SqlConnection.clearlallpools()在异常之后。此静态方法将物理关闭并删除池连接,池连接持有数据库上到期的共享锁,以防止数据库被丢弃


    请注意,关闭/处理连接只会返回到池的连接,单靠它是不够的。

    尝试添加
    SqlConnection.clearlallpools()在异常之后。嗨@DanGuzman-刚刚尝试过,它成功了,谢谢你:我想写这个作为答案,这样我就可以奖励你了?@Codexer-不是。如上所述,每个查询或命令都经过一个中间层,该层管理连接/命令的生命周期。见上图。另外,调用ClearAllPools可以使它立即工作。如果在删除之前,您运行命令
    alterdatabaseimportfail SET SINGLE_USER WITH rollbackimmediate?尝试添加
    SqlConnection.ClearAllPools()在异常之后。嗨@DanGuzman-刚刚尝试过,它成功了,谢谢你:我想写这个作为答案,这样我就可以奖励你了?@Codexer-不是。如上所述,每个查询或命令都经过一个中间层,该层管理连接/命令的生命周期。见上图。另外,调用ClearAllPools可以使它立即工作。如果在删除之前,您运行命令
    alterdatabaseimportfail SET SINGLE_USER WITH rollbackimmediate