处理或使用关键字 "using"

dispose or use the keyword "using"

我真的需要使用 comm.Dispose()conn.Dispose() 还是直接使用 using

using (OdbcConnection conn = new OdbcConnection())
{
    conn.Open();
    OdbcCommand comm = new OdbcCommand(sql, conn);
    OdbcDataReader dr = comm.ExecuteReader();

    while (dr.Read())
    {
      //codes here...
    }

    conn.Close();
    dr.Close();
    comm.Dispose();
    conn.Dispose();
}

如果是这样的话,我正在考虑这样做。

片段:

using (OdbcConnection conn = new OdbcConnection())
{
    conn.Open();
    using(OdbcCommand comm = new OdbcCommand(sql, conn))
    {
        using(OdbcDataReader dr = comm.ExecuteReader())
        {
            while (dr.Read())
            {
                //codes here...
            }
        }
        dr.Close();

    }
    conn.Close();
}

这样会更合适吗?

是的,您可以只使用 using - 它会为您调用 Dispose

您也可以省略 Close,因为 Dispose 会为您调用它。

using (OdbcConnection conn = new OdbcConnection())
{
    conn.Open();
    using(OdbcCommand comm = new OdbcCommand(sql, conn))        
    using(OdbcDataReader dr = comm.ExecuteReader())
    {
        while (dr.Read())
        {
            //codes here...
        }
    }            
}

第二个例子是合适的(除了 dr 在调用 Close 时不在范围内 - Dispose 也经常为这些类型调用 Close东西)作为

using(IDisposable foo = ...)
{
    //Do stuff using foo
}

等同于

IDisposable foo = ...;

try
{
    //Do stuff using foo
}
finally
{
    foo.Dispose();
}