1

我正在尝试在 catch 方法中编写一个 if-else 块,但是当我收到“并非所有代码路径都返回 int 类型”的错误时。

本质上,我正在编写一种将用户名和密码保存到 Sql CE 数据库的方法,并且我想测试一个特定的错误。(用户名已经存在。)用户名列是唯一的,所以它会可靠地抛出一个带有 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 更具体的错误(尽管我可能刚刚让我调试失败)。

有什么创造性的变通方法吗?最坏的情况是,我将编写一个方法,在调用此方法之前检查数据库中是否存在重复的用户名。

4

4 回答 4

6

看起来您的方法返回一个int. int你需要从你的 catch 块中返回一个类型的值。

  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;
  }
于 2012-11-25T06:17:10.397 回答
2

听起来你的函数返回一个int值。

在你的try块中,你得到并返回一个整数值。没关系。

在该catch块中,您没有提到返回整数。这就是问题。

因此,当函数采用异常路径时,它没有整数可以传回,从而导致错误。

于 2012-11-25T06:17:26.307 回答
0

你的整个函数需要返回值。由于您在 try-cathc 中吃异常,因此您需要在函数结束时返回某种类型。

于 2012-11-25T06:18:00.473 回答
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 值,那么 finallyreturn -1将不会生效。参考

于 2012-11-25T06:20:24.433 回答