【问题标题】:Try/Catch with an SQL connection [duplicate]使用 SQL 连接尝试/捕获 [重复]
【发布时间】:2019-10-06 21:36:41
【问题描述】:

这是这个问题的后续问题:

Correct use of Try Catch for the SQL connection in C#

当你写这样的代码时:

using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            using (SqlCommand cmd = new SqlCommand(queryGetPcPrintDetails, connection))
            {
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    if (reader != null)
                    {
                        while (reader.Read())
                        {
                            //do stuff
                        }
                    }
                } // reader closed and disposed up here

            } // command disposed here
        }

是否需要捕获异常才能关闭连接?例如,如果第二次使用或 do stuff 部分出现问题。我是否需要以某种方式尝试/最终关闭连接?

【问题讨论】:

标签: c# using-statement try-catch-finally


【解决方案1】:

每当您在using{} 块内创建连接时,连接会在using 块/范围的末尾自动关闭。在某种意义上自动关闭,只要您离开Using{} 的范围,就会调用Dispose() 方法

SQL connection class : MSDN

【讨论】:

  • 即使在使用范围结束之前出现异常?
  • @YonatanNir Dispose() 会在任何时候以任何方式调用 范围。作用域第一行的 return 语句会导致 Dispose() 被调用。 “最后”并不是我要表达的概念。
  • @EdPlunkett,已经回答了你的问题。我想知道为什么人们不赞成
  • 我看到 0 票,有什么问题?只是我的两分钱,以前已经解决过很多次了,我们不需要另一个...我可以回答,其他人也可以回答,但他们可能觉得评论就足够了,类似/确切的问题已经在 SO等等……
  • @PrasadTelkikar 不是我的问题。我没有投反对票。我怀疑他们可能投了反对票,因为这是一个非常简洁的答案,没有参考,和/或因为“最后”是描述正在发生的事情的一种很容易被误解的方式。你很少知道为什么人们在这里投反对票;也许他们认为这对你来说应该和对他们一样明显(尽管如果是这样,你几乎不会写下你所做的)。
猜你喜欢
  • 2015-12-05
  • 2016-07-18
  • 2020-12-16
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
相关资源
最近更新 更多