2011-02-10 66 views
3

我們有單元測試來測試我們的數據庫安裝和卸載功能是否成功。 單元測試使用SqlClient.SqlConnection類來檢查數據庫內容之前,期間和之後。爲什麼sqlConnection.Close()不關閉登錄?

我們的問題是使用後SqlClient.SqlConnection,因爲它聲稱用戶當前登錄卸載的降登錄部分失敗。儘管我們已呼籲了SQLConnection.close(),登錄似乎仍然開放。

我們的代碼看起來有點像這樣:

InstallTables(); // function uses smo to create tables in a database. 
string connString = CreateLogin("userName", "password"); // create login with smo 

// Test the returned connection string connects to the database 
using (SqlConnection con = new SqlConnection(connString)) 
{ 
    con.Open(); 
    //test code to read the DB version out of a table 
    //Dispose calls con.Close() - I have also tried calling it explicitly 
} 

DropTables(); // uses smo to drop tables from the database 
DropLogin("userName", "password"); // uses smo to drop the login 

的DropLogin失敗,出現以下異常: System.Data.SqlClient.SqlException:無法刪除登錄「engageSecurity_unittest_1294​​18264074692569」作爲用戶在當前登錄

如果我在DropLogin之後刪除所有的SqlConnection代碼,那麼一切運行良好。

有沒有人知道爲什麼用戶沒有註銷時,我打電話給SqlConnection.Close()?

這是關於連接池嗎?

回答

8

除非您在連接字符串中明確地禁用連接池,否則我的猜測是,即使您正在處理連接,連接池中仍然存在(如果您決定重新使用它):

SQL Server Connection Pooling (ADO.NET)

嘗試禁用連接池(由你的連接字符串中增加Pooling=false;),看看會發生什麼。

+0

謝謝賈斯汀 - 連接字符串中的Pooling = false做了詭計! – GarethOwen 2011-02-11 07:59:32