我得到了一个维护c#项目的任务,我找到了一些代码,如下所示:
try{
conn.Open();
...
conn.Close();
}catch(Exception e){
conn.Close();
}我知道通常关闭SqlConnection的方法是try-catch-finally或"using“关键字,但我发现我无法证明上面的代码是错误的,我找不到任何连接会泄漏的情况。
所以你能给我一些技术建议(不是编程风格)吗?谢谢
发布于 2010-03-03 12:46:04
你找不到任何情况?当...代码包含return语句时会怎样呢?在循环中,continue和break也可以满足要求。
您的特定代码显然不包含任何控制流语句,但这不是重点。重点是,当您使用常见的资源获取习惯用法时,例如try-finally和using,您不再需要担心代码的其余部分是什么。...可以是一行,也可以是一百行;如果操作得当,您在顶部获得的任何资源都将在底部释放。与其花时间去想其他可能是正确的方法(并不得不证明它),不如使用你知道是正确的方法,因为它们被设计成正确的。
此外,即使你能证明代码永远不会泄漏连接,让conn.Close()命令来解决你的程序可能抛出的每一个可能的异常仍然是一个糟糕的想法。不要捕捉你不知道如何解决的异常。
发布于 2010-03-03 13:03:10
连接是IDisposable,所以用using语句包装它:
using(conn) {
...
}它应该为你提供最好的保险。它甚至应该关闭连接,如果您将return从使用块(正如正确地提到,通常是一个隐藏的问题)。
发布于 2010-03-03 12:48:18
如果
conn.Close();引发异常。
https://stackoverflow.com/questions/2368822
复制相似问题