2016-11-23 68 views
0

我使用ADO.NET創建數據庫。基本上,我在接下來的方式執行SQL命令:獲取擺脫SqlConnection,關閉/處置後仍保留在活動監視器中

private bool ExecuteSqlCommand(string command) 
{ 
    var success = true; 

    using (var connection = GetSqlConnection()) 
    { 
     if (connection == null) 
      return false; 

     using (var myCommand = new SqlCommand("query", connection)) 
     { 
      try 
      { 
       connection.Open(); 
       myCommand.CommandText = command; 
       myCommand.ExecuteNonQuery(); 
      } 
      catch (Exception ex) 
      { 
       success = false; 
       Log.LogMessage(string.Format("Unable to execute SQL command: {0}", ex.Message)); 
      } 
     } 
    } 

    return success; 
} 

GetSqlConnection只是得到一些適當的SqlConnection與像

"Server={0}\\{1};User Id={2};Password={3};Application Name={4};" 

它運作良好,並正確執行命令,但有一個例外的連接字符串 - 根據到Sql Manager Studio活動監視器,即使在執行方法後,它仍保持活動連接狀態。

根據問題Why does my SqlConnection remain in the SSMS Processes list after closing it?,這是正確的行爲,因爲連接可能會被重用。但是serius問題是,那以後,READ_COMMITTED_SNAPSHOT命令將被調用這個數據庫,同時使用不同的SqlConnection。這導致異常,因爲READ_COMMITTED_SNAPSHOT要求,用於調用此命令的連接應該是數據庫的唯一連接。

我不能重複使用此連接進行數據庫的進一步操作,因爲我使用不同的連接字符串,數據庫指定爲InitialCatalog(顯然,我不能使用它,而數據庫不存在)。

那麼,我可以以某種方式刪除這個初始連接?

+1

試試這一個:[SqlConnection.ClearPool](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.clearpool) – Rafal

+1

@Rafal,爲什麼?爲什麼你需要觸摸連接輪詢呢?我不認爲這是無論如何與C#有關...而是連接如何管理DB端可能。 – Rahul

+2

這是連接池的工作原理,它在處理後將數據庫連接存儲爲打開狀態,以最小化打開關閉進程。 – Rafal

回答

相關問題