如果我没有显式关闭DataReader,在其超出其对象的作用域后会自动销毁吗?虽然我感觉不会,但还是想确认一下,如何查看是否已关闭?例如 windows应用程序中一个form class form1 : form
{
 public form1()
{
....
reader = cmd.ExecuteReader(CommandBehiavor.CloseConnection);
}private btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
}如上,如果我没有关闭reader,而是直接关闭窗体(不是退出程序),reader对象出了作用域会不会自动关闭和销毁?

解决方案 »

  1.   

    IsClosed属性可以判断!id(reader.IsClosed)
       ...
      

  2.   


    if(reader.IsClosed)
    //上面那句敲错了
      

  3.   

    关闭连接的时候自动关闭DataReader对象
    方法的内部不用关闭SqlDataReader。如果方法内需再次使用,需要先关闭
    关闭连接即可
      

  4.   

    以实际经验告诉你不会!这个reader是建立在数据库连接池中的所以必须显示关闭!
    如果不关时间长的执行的次数多了!数据库就死翘翘了!我以前干过这样的事! 
    出了问题还找不到原因!
      

  5.   

    你把它当成游标在OOP中的实现就能理解了。
      

  6.   

    申明下  上面说的有点歧义  
    如果我没有显式关闭DataReader,在其超出其对象的作用域后会自动销毁吗?
    我是说这句话  超出对象的作用域后不会马上自动销毁的 
      

  7.   

    如果想及时释放 或者按照LZ的意思要及时释放的话 
    C#提供了一种语法,可以确保在对象引用超出作用域时,在执行IDisposable接口的对象上自动调用Dispose()。该语法使用using关键字来完成。
    using (Test test = new Test()){
        //代码
    }
      

  8.   


    真的不会!我以前在项目中出现这个疏忽造成数据库运行一段时间后就无法连接!后来找到原因正是一个经常用到的reader没关闭!我的数据库oralce。