题
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;
}
要重新抛出异常。
不隶属于 StackOverflow