catch语句中的c#if-else

时间:2012-11-25 06:13:08

标签: c# exception-handling sql-server-ce

我正在尝试在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)。

任何有创意的解决方案? 最糟糕的情况是,我会编写一个方法,在调用此方法之前检查数据库是否有重复的用户名。

4 个答案:

答案 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