摆脱SqlConnection,在关闭/处置后仍保留在Activity Monitor中

时间:2016-11-23 13:05:30

标签: c# sql-server

我正在使用ADO.NET创建数据库。基本上,我正在以下一种方式执行SQL命令:

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?,这是正确的行为,因为连接可能会被重用。但是严重问题是,稍后,将使用不同的SqlConnection为此数据库调用READ_COMMITTED_SNAPSHOT命令。这导致异常,因为READ_COMMITTED_SNAPSHOT要求,用于调用此命令的连接应该是与数据库的唯一连接。

我无法重复使用此连接进行数据库的进一步操作,因为我为它们使用不同的连接字符串,数据库指定为InitialCatalog(显然,我不能使用它,而数据库不存在)。

那么,我可以以某种方式删除这个初始连接吗?

1 个答案:

答案 0 :(得分:1)

执行SqlConnection.ClearPool这将标记所有要丢弃的连接,而不是回收。