我正在尝试在catch方法中编写一个if-else块,但是当我得到错误时“并非所有代码路径都返回int类型。”
基本上,我正在编写一个将UserName和Password保存到Sql CE数据库的方法,我想测试一个特定的错误。 (UserName已经存在。)UserName列是唯一的,因此它将可靠地抛出一个带有NativeError = 25016的SqlCeException。我想用错误消息显示它,否则以更通用的方式处理其他异常。
我的代码是:
try
{
//insert command (This is where the duplicate column error is thrown)
//Select @@Identity & Return it
}
catch (SqlCeException ex)
{
if (ex.NativeError == 25016)
MessageBox.Show("Username already in use.");
else
//whatever
}
我尝试过显示不同的,更通用的消息并获得无返回错误。 我已经尝试抛出一个新的异常并在另一个块中捕获它。同样的错误。 我试过返回-1(作为一种标志值)。同样的错误。
对于这种特殊情况,似乎没有比SqlCeException更具体的错误(虽然我刚刚调试了debug-fu)。
任何有创意的解决方案? 最糟糕的情况是,我会编写一个方法,在调用此方法之前检查数据库是否有重复的用户名。
答案 0 :(得分:6)
看起来您的方法返回int
。您需要从catch块返回类型int
的值。
try
{
//insert command (This is where the duplicate column error is thrown)
//Select @@Identity & Return it
}
catch (SqlCeException ex)
{
if (ex.NativeError == 25016)
MessageBox.Show("Username already in use.");
else
{
//whatever
}
return -1;
}
答案 1 :(得分:2)
听起来你的函数返回int
值。
在try
块中,您获得并返回一个整数值。没关系。
在catch
块中,您没有提及返回整数。这就是问题所在。
因此,当函数接受异常路径时,它没有传回的整数导致错误。
答案 2 :(得分:0)
您的整个功能需要返回值。由于你在try-cathc中吃异常,你需要在函数结束时返回某种类型。
答案 3 :(得分:0)
使用finally块返回int:
try
{
//insert command (This is where the duplicate column error is thrown)
//Select @@Identity & Return it
}
catch (SqlCeException ex)
{
if (ex.NativeError == 25016)
MessageBox.Show("Username already in use.");
else
//whatever
}
finally
{
return -1;
}
如果try块返回Identity值,那么最终return -1
将不起作用。 Reference