我问一个SqlDataReader的问题!
SqlDataReader dr;
dr=null 和 dr.close()有什么区别?Dr=DataProcess.DataReader(strSql);
while(Dr.Read())
{}public SqlDataReader DataReader(string strSql)
{
try
{   
MyConn.Open();
Cmd=new SqlCommand(strSql,MyConn);
Dr=Cmd.ExecuteReader();
return Dr;
}
catch(Exception ex)
{
throw new ArgumentException(ex.Message);
}
finally
{
Dr=null;
MyConn=null;
}
}
问一下为什么我在第一次触发这个事件时成功,为什么我在第二次触发时 产生异常:对象没有被实力话引用!!

解决方案 »

  1.   

    finally
    {
    Dr=null;
    MyConn=null;
    }你第2次好象没有给 MyConn new一下
      

  2.   

    Dr=null;改成Dr.close();
    MyConn=null;改成MyConn.close();dr.close()关闭 SqlDataReader 对象
    dr=null null 关键字是表示不引用任何对象的空引用的文字值
      

  3.   

    当然
    finally
    {
    Dr=null;
    MyConn=null;
    }
    的时候已经变为null了,所以你要多次掉的话,就把Dr和MyConn的初始化放在DataReader()里面
      

  4.   

    你的dr不能null,否则引用的地方就无法在使用了,使用以后用dr.Close
      

  5.   

    用dr.Close,dr=null没有关闭与数据库的连接 MyConn=null这句话不用
      

  6.   

    Dr=null不能释放所有资源,Close一下先
      

  7.   

    可是我Dr已经被传出来,如果现在dr.close了,那我的dr.read()就用不了了!
      

  8.   

    有return语句应该不会运行finally里语句
    可能是连接没有关闭又再次打开,加一句试一试
    。。
    if (MyConn.State == ConnectionState.Open) MyConn.Close();
    MyConn.Open();

      

  9.   

    to:setu1   
    老大我虽然是个菜鸟被,可你也不能这么虎我呀!
    什么叫“有return语句应该不会运行finally里语句”
    有try{}catch{}finally{}程式就一定会执行finally{}!!!
      

  10.   

    把finally{Dr=null;MyConn=null;}全部去掉Dr=Cmd.ExecuteReader();
    改成:Dr=Cmd.ExecuteReader(CommandBehavior.CloseConnection);在你完全不用Dr的时候的代码断写上MyConn.close();
      

  11.   

    试试
    MyConn=null;
    --------->
    MyConn.Close();
      

  12.   

    同意 yeke888(小二郎dfgdfg)------------------
    每次启动这个方法的时候,因该
    从新new 一个连接对象第二个 finally 里面不能 dr.close(),那么,你的dr将会去不到任何数据,因为返回后,你又把它close掉。第3个 sqlConnection 可以被关掉。因为SqlDataReader已经带有自己的connection,就算你关掉他也可以,但是会产生两个问题a )假设,你是没有带任何参数 也就是CommandBehavior 是default的时候,而且你的Connection 是函数内的变量,最好在finally 关掉,因为sqlconnection 必须人工释放。
    b)假设,你是CommandBehavior是CloseConnection,那么Fianlly可以不用写MyConn.close
    因为,当你使用dr.close()的时候,会自动把连接也关闭。
      

  13.   

    手快快写错了很多字,从新发过。sorry 各位
    ----------------
    同意 yeke888(小二郎dfgdfg)------------------
    每次启动这个方法的时候,因该
    从新new 一个连接对象
    -----------------------------------
    1)finally 里面不能 dr.close(),那么,你的dr将会去不到任何数据,因为返回后,你又把它close掉。2) sqlConnection 可以被关掉。因为SqlDataReader已经带有自己的connection,就算你关掉他也可以读数据。但是会产生两个问题    a )假设,你是没有带任何参数 也就是CommandBehavior 是default的时候,而且你的Connection 是函数内的变量,最好在finally 关掉,因为sqlconnection 必须人工释放。
        b)假设,你是CommandBehavior是CloseConnection,那么Fianlly可以不用写MyConn.close
    因为,当你使用dr.close()的时候,会自动把连接也关闭。