我正在运行集成测试。在开始测试之前,我删除了数据库并再次创建它。第一次测试成功。但是在第二次测试开始时我得到了一个例外:
SetUp:System.Data.SqlClient.SqlException:无法删除数据库“Test”,因为它当前正在使用中。
Сode:
[TestFixture]
class Class1
{
public SqlConnection Repository;
[SetUp]
public void LocInit()
{
Repository = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=true;");
Repository.Open();
Repository.Execute("USE master;");
Repository.Execute("DROP DATABASE Test;");
Repository.Execute("USE master; CREATE DATABASE Test;");
Repository.Execute("USE Test;");
}
[Test]
public void Test1()
{
using (var repository = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=true;"))
repository.Execute("USE Test; SELECT 10");
}
[Test]
public void Test2()
{
using (var repository = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=true;"))
repository.Execute("USE Test; SELECT 10");
}
[TearDown]
public void LocalTearDown()
{
Repository.Dispose();
}
}
为什么我会收到此异常?
答案 0 :(得分:0)
您遇到此类问题的原因是仍有一些待处理的连接可能尚未被杀死。在实际删除数据库之前,一种解决方法是在描述here时终止所有连接:
ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE
另一个是追踪为什么会有这种联系。 This线程显示了如何列出与数据库的所有连接并以正确的方式摆脱它。
答案 1 :(得分:0)
我自己没试过,但也许你可以试试这个:
在连接字符串中设置Pooling = false
或
删除数据库之前清除池: SqlConnection.ClearAllPools()
"Cannot drop database because it is currently in use". How to fix?