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

来源:百度知道 编辑:UC知道 时间:2024/05/02 17:08:39
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 失败。

希望这些信息对您有帮助。

请注意变量的有效作用范围,在try 中定义的变量怎么可能在try块外有作用?

设int intNumber=-1;