在try{}中赋值为何不算?

xadave 2004-03-15 07:41:10
Hi,
有点整不明白,关于try/catch/finally结构的,代码如下:

try
{
myConnection.Open();
myReader = myCommand.ExecuteReader();
}
catch (SqlException sqle)
{
string errorMessages = "";

for (int i=0; i < sqle.Errors.Count; i++)
{
errorMessages += "Index #" + i + "\n" +
"Message: " + sqle.Errors[i].Message + "\n" +
"LineNumber: " + sqle.Errors[i].LineNumber + "\n" +
"Source: " + sqle.Errors[i].Source + "\n" +
"Procedure: " + sqle.Errors[i].Procedure + "\n";
}

nRst = 666;
strResult = "Fails to query ...- " + errorMessages;
myReader.Close();
myConnection.Close();
return nRst;
}

编译遇到错误:使用了未赋值的局部变量“myReader”!
在try{}中赋值为何不算呵?谢谢指点!

...全文
301 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangsuipeng 2004-04-13
  • 打赏
  • 举报
回复
楼上的
marvelstack 2004-04-13
  • 打赏
  • 举报
回复
分析一下,
楼主的代码执行到
myConnection.Open();
就抛出异常,下面的代码就没有执行
myReader = myCommand.ExecuteReader();

解决的办法就是在定义时
SqlDataReader myReader = null;
三杯倒 2004-04-13
  • 打赏
  • 举报
回复
{...}
是一個局部變數可見範圍

比如:

for ( int i = 1; i < 10 ; i++ )
{
int j = i;
}

十次循環, 定義十次 j, 程序為什麼不出錯呢? 因為 j 是局部變數
dahuzizyd 2004-04-13
  • 打赏
  • 举报
回复
你的try块中发生了异常,myReader没有正确的初始化
chenghaofeng 2004-04-13
  • 打赏
  • 举报
回复
在try的外面声明。
info9817 2004-04-13
  • 打赏
  • 举报
回复
建议这样,定义时初始化
SqlDataReader myReader = null;
就没有编译错误了!
windinwing 2004-03-16
  • 打赏
  • 举报
回复
myConnection.Open(); // 如果这里出现异常,会只接被系统try 进入 catch 块
myReader = myCommand.ExecuteReader();
你可以做个试验看看了 
raymond_xmr 2004-03-16
  • 打赏
  • 举报
回复
同意ddrbrier
walkinhill 2004-03-15
  • 打赏
  • 举报
回复
这种情况我也碰到过,我也没有很好的解决方法,如果在try 外面先给 myReader 赋值那肯定不行,因为赋值语句 myReader = myCommand.ExecuteReader(); 本身就有可能引发异常,一般只能在外面先定义 SqlDataReader myReader = null;
然后在 catch 语句里使用
if( myReader != null ){
myReader.Close();
}

但是我真的不知道有没有更好的解决方法
chenyuming2004 2004-03-15
  • 打赏
  • 举报
回复
myReader

你要先在外面声明一下

比如
SqlDataReader myReader;
然后才能使用。
Ernestvivi 2004-03-15
  • 打赏
  • 举报
回复
说明myReader = myCommand.ExecuteReader();有问题,看看它的值是什么?
ddrbrier 2004-03-15
  • 打赏
  • 举报
回复
可以在try上面给myReader赋一个哑值,呵呵


你要捕捉
myConnection.Open();
myReader = myCommand.ExecuteReader();
块的错误.
所以你给myReader赋的值是不能通过编译的
如果myConnection.Open()就引发异常,myReader当然就是空值了.
veaven 2004-03-15
  • 打赏
  • 举报
回复
因为try中,有可能会抛出异常,而导致你给变量赋值的语句没有被执行
而你又在try之外未赋值使用了该变量
编译器强制认为是错误

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧