IDE = VS7或2002

大家好,我在这里有一个很奇怪的问题。该代码不会出现像预期的那样被执行。我通过调试运行此,它的表演真奇怪。

我已经确定了虚拟目录使用ASP.NET 1.0.3705。

代码如下和我解释什么调试器显示我作为评价执行以下步骤:

try
{
    objConnection.Open();  // STARTS HERE
    objCommand.ExecuteNonQuery();  // DOES NOT THROW EXCEPTION
    int c = 0;  // THIS LINE IS EXECUTED
}
catch (SqlException sqle)
{

    LogError();  // THIS LINE IS NOT EXECUTED
    throw sqle;  // THIS LINE IS EXECUTED AFTER THE int c = 0; 
                 // sqle IS NULL
                 // EXCEPTION IS NOT CAUGHT AND 
                 // EXECUTION CONTINUES IN FINALLY BLOCK
}
finally
{
    // EXECUTES AS EXPECTED FROM HERE ON OUT,
    // AS THOUGH THE throw sqle; DID NOT HAPPEN.
    if (objConnection.State == ConnectionState.Open) objConnection.Close();
}

有没有人经历过这种奇怪的行为?不知道如何解决它?我可以广泛地改变方法,但我还是想知道为什么发生这种情况。

我怀疑,因为SQLE为空,这就是为什么如预期的那样扔不行为。但是,为什么我们跳进摆在首位的代码块?

我已经重新加载几次,保存和重建,与调试器执行,并且多次观看此行为。

感谢大家的帮助!

所有最好的,

格雷厄姆

有帮助吗?

解决方案

等待..您的代码不会抛出异常,你想知道为什么它不执行catch块?

修改(参考您的评论):

这听起来真的很难相信。我从来没有听说过在catch块内的实际例外是空的情况下,并按照您已经提到做的catch块中的第一行不执行这在我看来点到的方向,没有例外的。

你有没有尝试使用老式的调试技术(的Debug.WriteLine),并跳过调试器来检查程序流程?

我的假设是,你正在寻找在错误的地方,抛出异常..或者没有例外的。

其他提示

很奇怪。我不知道这是怎么回事你的代码,但我看到的一件事是使用:

catch (SqlException sqle)
{

    LogError();  // THIS LINE IS NOT EXECUTED
    throw sqle;  // THIS LINE IS EXECUTED AFTER THE int c = 0; 
                 // sqle IS NULL
                 // EXCEPTION IS NOT CAUGHT AND 
                 // EXECUTION CONTINUES IN FINALLY BLOCK
}

您想要写:

catch (SqlException sqle)
{

    LogError(); 
    throw; 
}

要重新抛出异常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top