是否有必要分别处置SqlConnection和SqlCommand?

我正在对应用程序进行一些维护工作,发现以下代码:

public void CallStoredProc(string storedProcName)
{
    using (SqlCommand command = new SqlCommand(storedProcName, CreateConnection()))
    {
        command.CommandType = CommandType.StoredProcedure;
        command.Connection.Open();

        // Additional code here.

        command.ExecuteNonQuery();
    }
}


在正常情况下以及是否有错误时,这会正确清理SqlConnection吗?还是我们必须将代码更改为:

public void CallStoredProc(string storedProcName)
{
    using (SqlConnection connection = CreateConnection())
    {
        using (SqlCommand command = new SqlCommand(storedProcName, connection))
        {
            command.CommandType = CommandType.StoredProcedure;
            command.Connection.Open();

            // Additional code here.

            command.ExecuteNonQuery();
        }
    }
}

最佳答案

是的,您将不得不单独处置连接。您还可以在source code中看到这一点:SqlCommand.Dispose()不会关闭或释放它使用的连接(顺便说一句,无论如何这都是很糟糕的,因为您无法使用相同的连接执行多个命令)。

关于c# - 是否需要处置SqlConnection和SqlCommand?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33116834/

10-13 07:37