using   (SqlDataReader   rdr   =   SQLHelper.ExecuteReader(.....))
{
   while(rdr.Read())
   {
   }
}和
SqlDataReader   rdr   =   SQLHelper.ExecuteReader(.....)
whhile(rdr.Read())
{
}
rdr.close();这两种方法哪种比较好?原因呢?

解决方案 »

  1.   

    能放Using里面,尽量放吧。 省的自己忘记了关闭。效果是一样的,自动和手动。
      

  2.   

    都一样的,用using可以避免忘了Close
      

  3.   

    主要看你的DataReader关闭的时机,下面的代码就没用using public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
                SqlCommand cmd = new SqlCommand();
                SqlConnection conn = new SqlConnection(connectionString);            // we use a try/catch here because if the method throws an exception we want to 
                // close the connection throw code, because no datareader will exist, hence the 
                // commandBehaviour.CloseConnection will not work
                try {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    cmd.Parameters.Clear();
                    return rdr;
                }
                catch {
                    conn.Close();
                    throw;
                }
            }
      

  4.   

    using 不是等下close(),而是Dispose();
    必须实现了IDisposable接口的类才能用using,当然,dispose的时候会把conn 关闭掉
      

  5.   

    其实SqlDataReader 不用你手动关闭在执行他过后他都是自动关闭的
      

  6.   

    支持4楼的。using是Dispose(); 而close()不等于Dispose()。
      

  7.   

    放在using中的 必须事件Idisposable接口 using块执行完就会自动调dispose方法不需要 手动调了 免的忘记释放
    但是也不会马上释放内存 内存的释放是垃圾回收干的活
      

  8.   

    能放Using里面,尽量放吧。 省的自己忘记了关闭。 效果是一样的,自动和手动。 
      

  9.   

    如果出现异常呢?????try该放using 里面还是外面???using 本身等同于try ...finally,那try放外面吗?如果这样的话,岂不是要先把reader弄个null放到try外面,这样catch的时候可以引用到
      

  10.   

    支持4楼的。using是Dispose(); 而close()不等于Dispose()。那么顺序应该是先执行Close()关闭连接,然后执行Dispose()释放资源。