Search code examples
c#asp.netusingsqlconnectionsqlcommand

Do I have to Close() a SQLConnection before it gets disposed?


Per my other question here about Disposable objects, should we call Close() before the end of a using block?

using (SqlConnection connection = new SqlConnection())
using (SqlCommand command = new SqlCommand())
{
    command.CommandText = "INSERT INTO YourMom (Amount) VALUES (1)";
    command.CommandType = System.Data.CommandType.Text;

    connection.Open();
    command.ExecuteNonQuery();

    // Is this call necessary?
    connection.Close();
}

Solution

  • Since you have a using block, the Dispose method of the SQLCommand will be called and it will close the connection:

    // System.Data.SqlClient.SqlConnection.Dispose disassemble
    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            this._userConnectionOptions = null;
            this._poolGroup = null;
            this.Close();
        }
        this.DisposeMe(disposing);
        base.Dispose(disposing);
    }