【问题标题】:Try/Catch does not catchTry/Catch 没有捕捉到
【发布时间】:2011-06-01 10:09:57
【问题描述】:

在下面的代码中,我故意将“@fooData”错误输入为“@foo111Data”,以检查 try 语句是否捕获了我的异常。请参见下面的代码。但是try/catch语句并没有在MessageBox中捕获并显示异常,VS2010只是分解并高亮了错误代码行。

try
{
    conn.Open();
    cmd.Parameters.AddWithValue("@foo111Data", dataStrTb1.Text);
    cmd.ExecuteNonQuery();
}
catch (SqlCeException ex)
{
    MessageBox.Show(ex.ToString());
}
finally
{
    conn.Close();
}

【问题讨论】:

  • 抛出什么类型的异常?
  • 我认为你在调试模式下运行,我认为这在发布模式下可以正常工作。
  • 您确定应该抛出SqlCeException(或任何)异常吗?您可以尝试改用System.Exception

标签: c# winforms exception try-catch


【解决方案1】:

也许正在抛出不同类型的异常?我建议您更改catch,使其仅捕获一般的Exception,并查看它是否抛出了另一种类型。

catch 语句中的MessageBox.Show 行中放置一个断点,然后您可以检查Exception

【讨论】:

    【解决方案2】:

    尝试联系SqlException

    catch (SqlException ex)
    {
        MessageBox.Show(ex.ToString());
    }
    

    【讨论】:

      【解决方案3】:

      而不是 SqlCeException 尝试捕获所有异常并查看它是如何工作的。

      我实际上会使用记录器,而不仅仅是像您现在所做的那样使用消息框。

      【讨论】:

        【解决方案4】:

        试试

        try 
        {     
        conn.Open();     
        cmd.Parameters.AddWithValue("@foo111Data", `dataStrTb1.Text);     
        cmd.ExecuteNonQuery(); 
        } 
        catch (SqlException ex) 
        {     
        MessageBox.Show(ex.ToString()); 
        }
        catch (Exception ex) 
        {     
        MessageBox.Show(ex.ToString()); 
        } 
        
        finally 
        {     
        conn.Close(); 
        }` 
        

        【讨论】:

        • 如果真的要写另一个例子,我也会在连接周围使用 Using 块并跟踪 ex.Message 而不是 ex.ToString()... :)
        • 我的想法是捕获异常,这样就不会捕获任何异常。对不起,如果你介意:)
        【解决方案5】:

        Visual Studio 中有一个功能可以让您在抛出异常时停止,即使它被捕获。

        只需单击菜单项“调试”,然后单击“异常”,然后单击“已抛出”列并取消标记某些您不希望导致调试器自动中断的异常。

        【讨论】:

          猜你喜欢
          • 2013-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-20
          • 2016-01-26
          • 1970-01-01
          相关资源
          最近更新 更多