Does SqlCommand.Dispose close the connection?

后端 未结 4 1109
一生所求
一生所求 2020-11-27 15:19

Can I use this approach efficiently?

using(SqlCommand cmd = new SqlCommand(\"GetSomething\", new SqlConnection(Config.ConnectionString))
{
    cmd.Connection         


        
4条回答
  •  一个人的身影
    2020-11-27 15:48

    No, Disposing of the SqlCommand will not effect the Connection. A better approach would be to also wrap the SqlConnection in a using block as well:

    using (SqlConnection conn = new SqlConnection(connstring))
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand(cmdstring, conn))
        {
            cmd.ExecuteNonQuery();
        }
    }
    

    Otherwise, the Connection is unchanged by the fact that a Command that was using it was disposed (maybe that is what you want?). But keep in mind, that a Connection should be disposed of as well, and likely more important to dispose of than a command.

    EDIT:

    I just tested this:

    SqlConnection conn = new SqlConnection(connstring);
    conn.Open();
    
    using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 1", conn))
    {
        Console.WriteLine(cmd.ExecuteScalar().ToString());
    }
    
    using (SqlCommand cmd = new SqlCommand("select field from table where fieldid = 2", conn))
    {
        Console.WriteLine(cmd.ExecuteScalar().ToString());
    }
    
    conn.Dispose();  
    

    The first command was disposed when the using block was exited. The connection was still open and good for the second command.

    So, disposing of the command definitely does not dispose of the connection it was using.

提交回复
热议问题