我使用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(顯然,我不能使用它,而數據庫不存在)。
那麼,我可以以某種方式刪除這個初始連接?
試試這一個:[SqlConnection.ClearPool](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.clearpool) – Rafal
@Rafal,爲什麼?爲什麼你需要觸摸連接輪詢呢?我不認爲這是無論如何與C#有關...而是連接如何管理DB端可能。 – Rahul
這是連接池的工作原理,它在處理後將數據庫連接存儲爲打開狀態,以最小化打開關閉進程。 – Rafal