使用释放连接和命令

时间:2019-02-20 17:53:40

标签: c# sql-server ado.net

当在单个using块中同时创建SqlConnection和SqlCommand时,都在退出时释放它们,还是使用必要的块嵌套?

using (SqlCommand command = new SqlConnection(ConnectionString).CreateCommand()) {

    // Use command..
}

2 个答案:

答案 0 :(得分:3)

一个using块仅在该块完成执行后就在您声明的资源上调用.Dispose()

MSDN: The Using Statement

因此,是的,您应该将SqlConnectionSqlCommand都包装在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实例,您可以确保即使出现异常,连接也将在离开作用域后关闭。