首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发布不带"finally“的SqlConnection

发布不带"finally“的SqlConnection
EN

Stack Overflow用户
提问于 2010-03-03 12:43:31
回答 8查看 765关注 0票数 2

我得到了一个维护c#项目的任务,我找到了一些代码,如下所示:

代码语言:javascript
复制
try{ 

    conn.Open(); 
    ... 
    conn.Close(); 
}catch(Exception e){ 

    conn.Close(); 
}

我知道通常关闭SqlConnection的方法是try-catch-finally或"using“关键字,但我发现我无法证明上面的代码是错误的,我找不到任何连接会泄漏的情况。

所以你能给我一些技术建议(不是编程风格)吗?谢谢

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-03-03 12:46:04

你找不到任何情况?当...代码包含return语句时会怎样呢?在循环中,continuebreak也可以满足要求。

您的特定代码显然不包含任何控制流语句,但这不是重点。重点是,当您使用常见的资源获取习惯用法时,例如try-finally和using,您不再需要担心代码的其余部分是什么。...可以是一行,也可以是一百行;如果操作得当,您在顶部获得的任何资源都将在底部释放。与其花时间去想其他可能是正确的方法(并不得不证明它),不如使用你知道是正确的方法,因为它们被设计成正确的。

此外,即使你能证明代码永远不会泄漏连接,让conn.Close()命令来解决你的程序可能抛出的每一个可能的异常仍然是一个糟糕的想法。不要捕捉你不知道如何解决的异常。

票数 8
EN

Stack Overflow用户

发布于 2010-03-03 13:03:10

连接是IDisposable,所以用using语句包装它:

代码语言:javascript
复制
using(conn) {
  ...
}

它应该为你提供最好的保险。它甚至应该关闭连接,如果您将return从使用块(正如正确地提到,通常是一个隐藏的问题)。

票数 4
EN

Stack Overflow用户

发布于 2010-03-03 12:48:18

如果

代码语言:javascript
复制
conn.Close();

引发异常。

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

https://stackoverflow.com/questions/2368822

复制
相关文章

相似问题

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