试图更好地理解'使用'声明

tha*_*Guy 5 c# using-statement

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

问题是所有的例子总是显示如下:

using (SqlCommand scmFetch = new SqlCommand())
{
    // code
}
Run Code Online (Sandbox Code Playgroud)

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

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();
}
Run Code Online (Sandbox Code Playgroud)

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

您最终可能会遇到强大的层次结构,但您的代码应该非常高效,对吧?或者你应该只将SqlDataAdapter对象放在using语句中,它会以某种方式确保所有其他对象也被处理掉?

感谢名单.

And*_*bel 8

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

using(A a = new A())
using(B b = new B())
{
   a.SomeMethod(b);
}
Run Code Online (Sandbox Code Playgroud)