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是空的,这就是为什么抛出不能像预期的那样运行。但是为什么我们一开始要跳到这个代码块中去呢?
我已经重新加载了它几次,保存和重新构建,并使用调试器执行,并多次观察这种行为。
感谢大家的帮助!
万事如意,
格雷厄姆
发布于 2009-05-15 16:16:19
等等..您的代码没有抛出异常,您想知道为什么它不执行catch块?
编辑(引用您的评论):
这听起来真的很难相信。我从来没有听说过catch块中的实际异常为null的情况,而且正如您已经提到的,catch块中的第一行没有执行,在我看来,这指向根本没有异常的方向。
您是否尝试过使用老式的调试技术(Debug.WriteLine)并跳过调试器来检查程序流?
我的假设是,您看错了抛出异常的位置。或者根本就没有例外。
发布于 2009-05-15 16:35:50
非常奇怪。我不确定你的代码是怎么回事,但我看到的一件事是:
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;
}重新抛出异常。
https://stackoverflow.com/questions/869579
复制相似问题