【问题标题】:ado.net Closing Connection when using "using" statementado.net 使用“使用”语句时关闭连接
【发布时间】:2011-05-22 07:54:48
【问题描述】:

我正在像这样对 SQL Server 进行数据库访问方法

  using (SqlConnection con = new SqlConnection(//connection string)
  {
    using (SqlCommand cmd = new SqlCommand(storedProcname, con))
     {
       try{
           con.open();
           //data reader code
       }
       catch
       {

       }
     }
  }

我是否需要关闭或处理 SqlCommand,或者 using 语句会为我处理这些?我只是不想连接挂起 谢谢

【问题讨论】:

    标签: c# tsql ado.net


    【解决方案1】:

    using 将为您处理。在后台,SqlConnection.Dispose() 调用 SqlConnection.Close() 方法,SqlCommand.Dispose() 调用 SqlCommand.Close()

    作为附加背景,using 语句是 try ... finally 的语法糖,它在 finally 中处理 IDisposable 对象。

    【讨论】:

    • 它会处理它 - 但我仍然会明确地关闭它并使用 using() 块作为我忘记时的“备份”。
    • 非常感谢!感谢所有回复的人!
    • 依赖这样的“功能”可能很危险,而且令人困惑。我仍然会明确地关闭它,就像 marc_s. TBH,我也会明确地处理它,并且只在我想要处理它的地方。
    【解决方案2】:

    顺便说一句,您可以使代码更简洁易读,如下所示:

     using (SqlConnection con = new SqlConnection(/*connection string*/))
     using (SqlCommand cmd = new SqlCommand(storedProcname, con))
     {
        //...
     }
    

    【讨论】:

      【解决方案3】:

      正如 Phil 所说,using 子句会为您处理好它。编译下来后,它将连接创建包装在 try .. finally 中,并将连接处理调用放在 finally 中。

      更多信息您可以查看using statement article at msdn

      【讨论】:

        【解决方案4】:

        是的,您的代码将关闭连接,但这通常意味着释放回连接池以便稍后真正关闭。

        如果你执行这个 sn-p 代码,然后执行 sp_who 并观察你的连接仍然存在,那就是原因。

        如果您绝对需要真正关闭连接(肯定是边缘情况),请使用ClearAllPools SqlConnection的静态方法

        【讨论】:

          【解决方案5】:

          Using关键字会自动为你关闭连接 这样您就不必担心每次最后都调用connection.close()

          【讨论】:

          • 我不太明白,这与接受的答案有何不同。你能详细说明一下吗?
          【解决方案6】:

          当范围

          using (SqlConnection con = new SqlConnection(//connection string) 
          {
          }
          

          将结束,连接将由运行时自动释放。所以别担心

          【讨论】:

            【解决方案7】:

            我认为 SqlCommand 不需要“使用”。 SqlConnection 的“使用”可以单独为您完成这项工作。 实际上,您的连接已提交到连接池。

            【讨论】:

            • 不 - 你需要 using() 来处理每个一次性物品 - 单独 using(SqlConnection.....) 不会照顾你的 SqlCommand
            • 任何实现 IDisposable 的东西都应该放在 using 语句中。能够快速查看不正确的代码是一种很好的做法。
            猜你喜欢
            • 2017-01-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-28
            相关资源
            最近更新 更多