c#中try...catch...finally问题

public int UpdateDataBase(string tempStrOleDb)
{
int intNumber;
this.myConnection = new OleDbConnection(this.connectionString);
try
{this.myConnection.Open();
OleDbCommand tempOleDbCommand = new OleDbCommand(tempStrOleDb, this.myConnection);
intNumber = tempOleDbCommand.ExecuteNonQuery(); //返回数据库中影响的行数
}
catch
{
MessageBox.Show("数据库连接错误!","错误");
this.Close();
}
finally
{
this.myConnection.Close();
}
return intNumber;
}
为什么这样会出错?编译器说我使用了没有初始值的变量intNumber,我晕了,哪位高手帮小菜我解决一下,谢谢了....

您好,

这是因为编译器无法保证try块中的每条代码都可以执行到,例如如果
this.myConnection.Open();
这句在打开数据库联接时出了错,那后面的赋值语句将永远都不能被执行。

对于您的代码,我首先建议不要使用通用Catch块,这可能隐藏很多其他的问题,例如您可以先捕获
InvalidOperationException
OleDbException
两个异常,最后再使用通用catch块,而且应该输出错误的详细信息。进行必要的修改。

对于这个变量的问题,我想您可以在catch块捕获错误后直接return -1;但是这样做有一个问题,那就是finally块中的语句在出错的时候就执行不到了。

我感觉您可以这样修改一下:在方法的开始声明int intNumber; 变量的时候给它赋初始值-1:
int intNumber = -1;
然后其他的地方不用进行修改,这样如果执行成功,就返回受影响的行数,如果失败就直接返回 -1 失败。

希望这些信息对您有帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-05-13
设int intNumber=-1;
第2个回答  2007-05-13
请注意变量的有效作用范围,在try 中定义的变量怎么可能在try块外有作用?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网