类OA.Config 中有如下方法:
                   /// <summary>
/// 返回一个SqlDataReader对象.但是使用完后还需关闭此对象和连接
/// </summary>
/// <param name="Sql">查询语句</param>
public SqlDataReader ExecuteReader_return_dr(string Sql)
{
this.Con.Open(); 
SqlCommand com = new SqlCommand(Sql,Con);
SqlDataReader SqlDataReader_dr =com.ExecuteReader();
            return SqlDataReader_dr;
}
当我调用这个方法后会把一个SqlDataReader 结果返回如下:
protected OA.Config Conn=new OA.Config();
SqlDataReader dr = Conn.ExecuteReader_return_dr(sql);
使用完dr后再进行关闭SqlDataReader 及数据库连接。
dr.Close();
Conn.Close();
所以我想请问方法ExecuteReader_return_dr中的SqlDataReader_dr是否自己自动关闭。。
要不我感觉整个程序存在了两个SqlDataReader

解决方案 »

  1.   

    不会自动关闭,但程序中也不会出现两个SqlDataReader。SqlDataReader dr

    SqlDataReader SqlDataReader_dr
    就是一个东西这是因为SqlDataReader是引用对象,所有的赋值操作都是传递引用,不产生拷贝。
    所以SqlDataReader dr = Conn.ExecuteReader_return_dr(sql);其实就是把SqlDataReader_dr传给dr。实际上,dr就是SqlDataReader_dr,两者并没有什么区别。
      

  2.   

    依 Ivony() 兄台的意思。那么dr.Close();也就是关闭SqlDataReader_dr了
      

  3.   

    不太用dr
    老是让SQL出现连接池已满
      

  4.   

    依 Ivony() 兄台的意思。那么dr.Close();也就是关闭SqlDataReader_dr了
    无错。不过其实,Conn.Close();也会关闭DataReader,因为在SqlConnection.Close方法里关闭了DataReader。
      

  5.   

    public SqlDataReader ExecuteReader(string cmdText)
    {
    SqlCommand cmd = new SqlCommand();
    SqlConnection conn = new SqlConnection(GetConnectString());
    try
    {
    PrepareCommand(cmd, conn, null, CommandType.Text, cmdText, null);
    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    return rdr;
    }
    catch(Exception e)
    {
    conn.Close();
    Sys.ShowErrorInfo(e.Message.ToString());
    throw;
    }
    }
    其中调用CommandBehavior.CloseConnection参数后,只需要将DataReader.close关闭,其sqlconnection会随之关闭的