[英]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.