2016-09-06 151 views
0

我正在運行集成測試。在開始測試之前,我刪除了數據庫並重新創建。第一次測試是成功的。但在第二次測試開始時,我得到一個異常:運行集成測試時拋出SqlException

SetUp:System.Data.SqlClient.SqlException:無法刪除數據庫「測試」,因爲它當前正在使用中。

С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

這是跨越多個固定裝置嗎? –

+3

看到這裏的'主人'嚇壞了我的生活地獄。 –

回答

0

您遇到此類問題的原因是仍然存在一些尚未終止的掛起連接。一個解決辦法是殺死所有的連接所描述的here,實際刪除DB前:

ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

另一個辦法是追查爲什麼會有留下了這樣的連接。 This線程顯示如何列出到您的數據庫的所有連接,並以適當的方式擺脫它。

+0

這是一個測試數據庫。沒有其他用戶。我不明白什麼可能是一些掛起的連接。 –

+0

那麼您的一個測試可能會使連接處於活動狀態,或者在服務器管理終止以前的連接之前發生DROP。如果涉及網絡,這一點從未明顯。 – Yakuza

相關問題