繁体   English   中英

ado.net使用“using”语句时关闭连接

[英]ado.net Closing Connection when using “using” statement

我像这样对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语句是否会为我处理? 我只是不希望连接挂开谢谢

using将为您照顾它。 在引擎盖下, SqlConnection.Dispose()调用SqlConnection.Close()方法, SqlCommand.Dispose()调用SqlCommand.Close()

作为附加的背景下, using的语句是语法糖的try ... finally是部署在IDisposable的对象finally

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

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

正如菲尔所说,使用条款将为您处理。 当编译下来时,它最后将try连接创建包装起来。最后将连接处理调用放在finally中。

有关更多信息,请参阅msdn上using statement文章

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

如果您执行此代码片段,然后执行sp_who并观察您的连接仍然存在,那就是原因。

如果你绝对需要真正关闭的连接(边缘情况确定)那么使用SqlConnection的ClearAllPools静态方法

Using关键字会自动为您关闭连接,因此您不必担心每次都在最后调用connection.close()

当范围

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

将结束,连接将由运行时自动处理。 所以不要担心

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM