因为try中,有可能会抛出异常,而导致你给变量赋值的语句没有被执行
而你又在try之外未赋值使用了该变量
编译器强制认为是错误

解决方案 »

  1.   

    可以在try上面给myReader赋一个哑值,呵呵
    你要捕捉
    myConnection.Open();
        myReader = myCommand.ExecuteReader();
    块的错误.
    所以你给myReader赋的值是不能通过编译的
    如果myConnection.Open()就引发异常,myReader当然就是空值了.
      

  2.   

    说明myReader = myCommand.ExecuteReader();有问题,看看它的值是什么?
      

  3.   

    myReader你要先在外面声明一下比如
    SqlDataReader myReader;
    然后才能使用。
      

  4.   

    这种情况我也碰到过,我也没有很好的解决方法,如果在try 外面先给 myReader 赋值那肯定不行,因为赋值语句 myReader = myCommand.ExecuteReader(); 本身就有可能引发异常,一般只能在外面先定义 SqlDataReader myReader = null;
    然后在 catch 语句里使用 
    if( myReader != null ){
        myReader.Close();
    }但是我真的不知道有没有更好的解决方法
      

  5.   

    myConnection.Open(); // 如果这里出现异常,会只接被系统try 进入 catch 块
        myReader = myCommand.ExecuteReader();
     你可以做个试验看看了 
      

  6.   

    建议这样,定义时初始化
    SqlDataReader myReader = null;
    就没有编译错误了!
      

  7.   

    你的try块中发生了异常,myReader没有正确的初始化
      

  8.   

    {...}
    是一個局部變數可見範圍比如:for ( int i = 1; i < 10 ; i++ )
    {
        int j = i;
    }十次循環, 定義十次 j, 程序為什麼不出錯呢? 因為 j 是局部變數
      

  9.   

    分析一下,
    楼主的代码执行到
    myConnection.Open();
    就抛出异常,下面的代码就没有执行
    myReader = myCommand.ExecuteReader();解决的办法就是在定义时
    SqlDataReader myReader = null;