c# - 试图更好地理解 'using' 语句

标签 c# using-statement

我阅读了几篇关于 using 语句的文章,试图了解何时应该使用它。听起来大多数人认为应该尽可能多地使用它,因为它可以保证处理未使用的对象。

问题是所有的例子总是这样显示:

using (SqlCommand scmFetch = new SqlCommand())
{
    // code
}

这是有道理的,但它只是一小段代码。在数据库上执行查询时我应该做什么?所有步骤是什么?它看起来像这样吗:

string sQuery = @"
    SELECT [ID], [Description]
    FROM [Zones]
    ORDER BY [Description] ";

DataTable dtZones = new DataTable("Zones");

using (SqlConnection scnFetchZones = new SqlConnection())
{
    scnFetchZones.ConnectionString = __sConnectionString;
    scnFetchZones.Open();

    using (SqlCommand scmdFetchZones = new SqlCommand())
    {
        scmdFetchZones.Connection = scnFetchZones;
        scmdFetchZones.CommandText = sQuery;

        using (SqlDataAdapter sdaFetch = new SqlDataAdapter())
        {
            sdaFetch.SelectCommand = scmdFetchZones;
            sdaFetch.Fill(dtZones);
        }
    }

    if (scnFetchZones.State == ConnectionState.Open)
        scnFetchZones.Close();
}

我想知道的是:
• 是否可以使用 4、5、10 个嵌套的 using 语句来确保所有对象都被释放?
• 我在什么时候做错了什么,我应该考虑修改吗?
• 如果由于嵌套 using 语句太多而需要修改,我有什么选择?

您最终可能会得到一个令人生畏的层次结构,但您的代码应该非常高效,对吧?或者,例如,您是否应该只将 SqlDataAdapter 对象放在 using 语句中,它会以某种方式确保所有其他对象也得到处理?

谢谢。

最佳答案

拥有许多嵌套的 using 语句是完全有效的:

using(A a = new A())
using(B b = new B())
{
   a.SomeMethod(b);
}

关于c# - 试图更好地理解 'using' 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8133182/

相关文章:

C# 使用 SearchResultCollection 枚举大量 AD 用户

c# - 使用 EP Plus 在工作表上允许前导零

c# - 通过 Google Calendar API v3 创建重复事件

vb.net - 在 Visual Basic 中使用语句

c# - 访问字符串数组中的字符

c# - facebook 类似于 ASP.net 中的聊天应用程序

C#/Informix : Do I need to explicitly call Close on my DB Connection if it's in a using statement?

scope - 如何为温莎城堡中的特定自定义范围生活方式 "BeginScope"?

c# - 抛出类型为 'System.OutOfMemoryException' 的异常。使用 IDataReader 时的 C#

c# - C#中使用[using]语句好还是[dispose]方法好?这是否适用于外部 (COM) 对象?