当 运行 集成测试抛出 SqlException
When run integration tests throw SqlException
我正在 运行 集成测试。在开始测试之前,我删除了数据库并重新创建了它。第一次测试成功。但是在第二次测试开始时我得到一个异常:
SetUp : System.Data.SqlClient.SqlException : Cannot drop database "Test" because it is currently in use.
代码:
[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();
}
}
为什么我会得到这个异常?
您遇到此类问题的原因是仍有一些挂起的连接可能尚未被终止。一种解决方法是在实际删除 DB 之前,如 here 所述终止所有连接:
ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE
另一个是追查为什么还有这样的联系。 This 线程展示了如何列出与数据库的所有连接并以正确的方式删除它。
我自己还没有尝试过,但也许你可以试试这个:
在连接字符串中设置 Pooling=false
或
删除数据库前清除池:
SqlConnection.ClearAllPools()
"Cannot drop database because it is currently in use". How to fix?
我正在 运行 集成测试。在开始测试之前,我删除了数据库并重新创建了它。第一次测试成功。但是在第二次测试开始时我得到一个异常:
SetUp : System.Data.SqlClient.SqlException : Cannot drop database "Test" because it is currently in use.
代码:
[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();
}
}
为什么我会得到这个异常?
您遇到此类问题的原因是仍有一些挂起的连接可能尚未被终止。一种解决方法是在实际删除 DB 之前,如 here 所述终止所有连接:
ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE
另一个是追查为什么还有这样的联系。 This 线程展示了如何列出与数据库的所有连接并以正确的方式删除它。
我自己还没有尝试过,但也许你可以试试这个:
在连接字符串中设置 Pooling=false
或
删除数据库前清除池: SqlConnection.ClearAllPools()
"Cannot drop database because it is currently in use". How to fix?