当在单个using块中同时创建SqlConnection和SqlCommand时,都在退出时释放它们,还是使用必要的块嵌套?
using (SqlCommand command = new SqlConnection(ConnectionString).CreateCommand()) {
// Use command..
}
答案 0 :(得分:3)
一个using
块仅在该块完成执行后就在您声明的资源上调用.Dispose()
。
因此,是的,您应该将SqlConnection
和SqlCommand
都包装在using
语句中,以确保这两个资源都得到正确处理。
编辑:您还可以像这样堆叠using
命令:
using (SqlConnection connection = new SqlConnection("connection string"))
using (SqlCommand command = new SqlCommand("command", connection)) {
// Your code here
}
答案 1 :(得分:3)
最重要的部分是最好在SqlConnection
语句的帮助下放置using
对象。因此,按照您的示例,这将是执行此操作的适当方法:
using (var cn = new SqlConnection(ConnectionString))
{
cn.Open();
using (var command = cn.CreateCommand())
{
// Use command..
}
}
这是using
语句在后台的转换,您可以了解它如何减少样板:
{
var cn = new SqlConnection(ConnectionString);
try
{
cn.Open();
{
var command = cn.CreateCommand();
try
{
// Use command..
}
finally
{
command.Dispose();
}
}
}
finally
{
cn.Dispose();
}
}
通过使用SqlConnection
语句处置using
实例,您可以确保即使出现异常,连接也将在离开作用域后关闭。