Is it necessary to dispose SqlConnection as well as SqlCommand?

Is it necessary to separately dispose of a SqlConnection as well as a SqlCommand?

I'm doing some maintenance work on an application and found the following code:

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

        // Additional code here.

        command.ExecuteNonQuery();
    }
}

Will this clean up the SqlConnection properly, under normal circumstances as well as if there is an error? Or would we have to alter the code to something like:

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();
        }
    }
}

Yes, you will have to dispose (of) the connection separately. You can also see this in the source code: SqlCommand.Dispose() does not close or dispose the connection it uses (by the way, that would be bad anyway as you could not execute multiple commands with the same connection).


yes , it is necessary to dispose the sqlconnection and sqlcommand object after your piece of code gets executed.

Now, there are two ways by which you can achieve this. 1. Write your code in using statement which will take care of disposing the objects, as sqlconnection and sqlcommand implements the IDisposable interface which takes care of disposing the objects.. 2. by calling .close() method explicitly on sqlconnection object.

链接地址: http://www.djcxy.com/p/20372.html

上一篇: C#为什么SqlCommand构造函数同时具有SqlConnection和SqlTransaction?

下一篇: 是否需要配置SqlConnection以及SqlCommand?