public SqlDataReader GetSqlDataReader(string SQL)
{
        SqlCommand cmd = new SqlCommand(SQL); 
        SqlDataReader dr = cmd.ExecuteReader(); 
        return dr;
}public string GetData(string SQL)
{
        SqlDataReader dr = GetSqlDataReader(SQL);
        string value=dr["val"];
        dr.close();
        return value;
}
GetSqlDataReader(string SQL)方法返回SqlDataReader,GetData(string SQL)方法调用GetSqlDataReader(string SQL)方法把dr关闭后,在 GetSqlDataReader(string SQL)方法里定义的SqlDataReader没有关闭还占连接池空间吗?

解决方案 »

  1.   

    SqlDataReader是引用类型,有几处引用的话,一处关闭就可以了
    貌似你的连接没有建立和Open?
      

  2.   

    SqlDataReader对象在两个方法里传递的是对象的引用,因此外面的SqlDataReader就是里面的SqlDataReader。
      

  3.   

    using(SqlDataReader dr = GetSqlDataReader(SQL))
    {
      string value=dr["val"];  dr.close();
    }
      

  4.   


    你的代码能执行吗?测试过吗?所谓“关闭”是为了立刻关闭SqlConnection实例对象,如果跟这个无关那么根本用不着考虑DBDataReader是否关闭的问题。
      

  5.   

    你关是没问题,
    不过程序中一定先READ才有值的。