简体   繁体   中英

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 , 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.

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).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM