首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常处理-已跳过行,并且sqle为空

异常处理-已跳过行,并且sqle为空
EN

Stack Overflow用户
提问于 2009-05-15 16:10:48
回答 2查看 166关注 0票数 0

IDE = VS7或2002

大家好,我这里有一个非常奇怪的问题。代码似乎没有按预期执行。我正在通过调试器运行它,它的性能真的很奇怪。

我已确保虚拟目录使用的是ASP.NET 1.0.3705。

代码如下,我解释了调试器在注释中显示的执行步骤:

代码语言:javascript
复制
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是空的,这就是为什么抛出不能像预期的那样运行。但是为什么我们一开始要跳到这个代码块中去呢?

我已经重新加载了它几次,保存和重新构建,并使用调试器执行,并多次观察这种行为。

感谢大家的帮助!

万事如意,

格雷厄姆

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-15 16:16:19

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

编辑(引用您的评论):

这听起来真的很难相信。我从来没有听说过catch块中的实际异常为null的情况,而且正如您已经提到的,catch块中的第一行没有执行,在我看来,这指向根本没有异常的方向。

您是否尝试过使用老式的调试技术(Debug.WriteLine)并跳过调试器来检查程序流?

我的假设是,您看错了抛出异常的位置。或者根本就没有例外。

票数 0
EN

Stack Overflow用户

发布于 2009-05-15 16:35:50

非常奇怪。我不确定你的代码是怎么回事,但我看到的一件事是:

代码语言:javascript
复制
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
}

你想写下:

代码语言:javascript
复制
catch (SqlException sqle)
{

    LogError(); 
    throw; 
}

重新抛出异常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/869579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档