SqlDataReader sdr=null;
SqlConnection conn;
try{
  sdr=cmd.ExecuteReader();
  conn=new SqlConnection("sfdsl");}catch{
//////
}finally{
  sdr.Close();
  conn.Close();//这里报错误!!
}两个对象的区别就是一个给了个NULL一个没给;;
如果把两个对象的close放到try{}里面就不回出错!!
那么我是不是可以认为sdr和conn在退出try{}就被释放了??

解决方案 »

  1.   

    是不是错误被catch屏蔽掉了?你跟下代码
      

  2.   

    当执行到sdr=cmd.ExecuteReader();就可能出错啊,此时进行不下去,所以finally里面的conn有可能还没有初始化,因此编译器报错,应该是逻辑上的问题
      

  3.   

    conn.Close();//这里报错误!!
    ==========>
    if( conn.State = ConnectionState.Open )
    conn.Close();
      

  4.   

    你的问题出在try{}里面,因为你的程序可能在实例化连接之前就出错了,接着就执行catch{}里的东东,最后再执行finally{}里的关闭语句,
    问题就在这里,你在try里面根本就没有实例化连接或者打开连接,在finally 里如何能关闭.
      

  5.   

    如果用了finally{},不管有没有错程序都行执行它里面的操作的.
      

  6.   

    这样
    if( conn.State = ConnectionState.Open )
        conn.Close();或者就别管了......交给GC 帮你关
      

  7.   

    sdr=cmd.ExecuteReader();
      conn=new SqlConnection("sfdsl");
    怎么能先执行语句,再创建连接呢。
      

  8.   

    各位可能还没理解我的意思,,首先,try{}里面的语句是肯定没有错误,,,,我现在奇怪的是,这个写法编译能够通过,,为什么??
    SqlConnection conn=null;
    conn.close();另外:
    SqlConnection conn;
    try{
        conn=new SqlConnection("sfdsl");}catch{
    //////
    }finally{
        conn.Close();//这里报错误!!
    }
    为什么?我明明已经在try{}里面有了个实例,为什么finally{}这里不能使用conn.close();提示是conn没有实例化!!!
      

  9.   

    我可能没说清楚,,,
    try{}里面的代码没问题,所以在这里不用去考虑catch{}
    我只是奇怪两种写法,一个给个null就可以编译通过,不给就报错误!!
    SqlDataReader sdr=null;
    sdr.close();
    或者
    SqlDataReader sdr;
    sdr.close();//这里报错还有就是,,我明明在try{}里面已经conn=new SqlConnection("sfdsl");
    那么就应该可以使用conn.close()
      

  10.   

    对finally来说只认外面的SqlConnection conn;
    它不会管conn=new SqlConnection("sfdsl");这句,对finally来说conn尚未实例化,所以需要改成SqlConnection conn=null;
    而且在finally里conn和sdr最好先判断是否是null这是我自己的理解,因为如果conn在try内定义的话,甚至会说没这个变量
    不知道有没有说错
      

  11.   

    thoughter(绝对零度·冰封の刺猬) 正确你可以看下变量的可见域方面知识
      

  12.   

    当SqlConnection conn做为函数中的变量的时候,在try{}里可以访问,但是在finally{}则不能。。为什么??
    当SqlConnection conn做为类中的数据成员的时候,则没有上面的问题!!
      

  13.   

    有个结论!!引用类型必须被赋值才能使用!!给null也算是赋值!!!