Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#如果catch语句中有else_C#_Exception Handling_Sql Server Ce - Fatal编程技术网

c#如果catch语句中有else

c#如果catch语句中有else,c#,exception-handling,sql-server-ce,C#,Exception Handling,Sql Server Ce,我试图在catch方法中编写一个if-else块,但是当我得到一个错误“并非所有代码路径都返回int类型” 本质上,我正在编写一个方法,将用户名和密码保存到Sql CE数据库中,我想测试一个特定的错误。(用户名已存在。)用户名列是唯一的,因此它将可靠地抛出NativeError=25016的SqlCeException。我想用一条错误消息来显示它,否则用一种更通用的方式处理其他异常 我的代码是: try { //insert command (This is where the

我试图在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更具体的错误了(尽管我刚刚调试失败)

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

您的方法似乎返回了一个
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;
  }

您的方法似乎返回一个
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;
  }

听起来您的函数返回了一个
int

try
块中,您得到并返回一个整数值。那很好

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


因此,当函数采用异常路径时,它没有返回导致错误的整数。

听起来像是函数返回了一个
int

try
块中,您得到并返回一个整数值。那很好

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


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

整个函数都需要返回值。由于您在try-cathc中遇到异常,您需要在函数末尾返回某种类型的值。

您的整个函数都需要返回值。由于您在try cathc中遇到异常,因此需要在函数末尾返回某种类型的结果。

使用finally block返回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;
  }

如果尝试阻止返回标识值,则最终
返回-1
将不起作用

使用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;
  }

如果尝试阻止返回标识值,则最终
返回-1
将不起作用

您提到的错误消息是关于函数的返回值的,您共享的代码中没有显示这些信息。插入后,我选择插入到的表的@标识,然后返回它。我发现唯一能阻止这个错误的方法就是在catch块中放入“throw ex”,而不是其他任何东西。我只是一个学生,不擅长尝试接球。有什么想法吗?回答这个问题的其他人已经了解了问题的核心——即使在调用catch子句时,您也需要返回值。您提到的错误消息是关于函数的返回值,您共享的代码中没有显示这些信息。在插入之后,我选择插入到的表的@标识,然后返回它。我发现唯一能阻止这个错误的方法就是在catch块中放入“throw ex”,而不是其他任何东西。我只是一个学生,不擅长尝试接球。有什么想法吗?其他回答问题的人已经了解了问题的核心——即使调用catch子句,也需要返回值。+1。(经过编辑的答案在else中添加了大括号-虽然保存2字节的源代码非常重要,但注释不被视为语句-因此return仅在else部分中出现)。@AlexeiLevenkov-感谢您让它更清晰。我假设读者会理解
//which
代表
else
块。最好是在无误的情况下犯错。是的,我做了这一次,除了我把返回-1放在if块之后,但是在捕捉中。我想我不知怎么地误解了这个问题。。我知道这是一个糟糕的形式,但是有人介意把这个问题再投票几次吗?我缺乏对那些乐于助人的人进行投票的因果报应点。我只需要15+1。(经过编辑的答案在else中添加了大括号-虽然保存2字节的源代码非常重要,但注释不被视为语句-因此return仅在else部分中出现)。@AlexeiLevenkov-感谢您让它更清晰。我假设读者会理解
//which
代表
else
块。最好是在无误的情况下犯错。是的,我做了这一次,除了我把返回-1放在if块之后,但是在捕捉中。我想我不知怎么地误解了这个问题。。我知道这是一个糟糕的形式,但是有人介意把这个问题再投票几次吗?我缺乏对那些乐于助人的人进行投票的因果报应点。我只需要15分钟,我不太好。如果您的代码工作正常,它也会根据正确的值返回-1。有什么原因吗?如果代码工作正常,它会给ValueToReturn赋值,然后返回。如果我们在try块中返回,您是对的,但我不确定try-catch之后是否没有其他内容。我不是很好。如果您的代码工作正常,它也会根据正确的值返回-1。有什么原因吗?如果代码工作正常,它会给ValueToReturn赋值,然后返回。如果我们在try块中返回,您是对的,但我不确定try catch之后是否没有其他内容。