c# & # 39;使用# 39;声明的问题

本文关键字:问题 声明 使用 | 更新日期: 2023-09-27 17:52:38

如果使用using子句来处理连接,那么子句中实现IDisposable的其他项是否也自动处理?如果没有,你如何确保所有的一次性物品都被自动处理掉?

public static DataTable ReturnDataTable(
    string ConnectionString, string CommandTextString, CommandType CommandType, 
    int CommandTimeout, List<System.Data.SqlClient.SqlParameter> ParameterList = null)
{
    using (System.Data.SqlClient.SqlConnection Connection =
        new System.Data.SqlClient.SqlConnection())
    {
        Connection.ConnectionString = ConnectionString;
        System.Data.SqlClient.SqlCommand Command =
            new System.Data.SqlClient.SqlCommand();
        Command.Connection = Connection;
        Command.CommandText = CommandTextString;
        Command.CommandType = CommandType;
        Command.CommandTimeout = CommandTimeout;
        if (ParameterList != null)
        {
            if (ParameterList.Count > 0)
            {
                foreach (SqlParameter parameter in ParameterList)
                {
                    Command.Parameters.AddWithValue(
                        parameter.ParameterName, parameter.Value);
                }
            }
        }
        System.Data.DataTable DataTable = new System.Data.DataTable();
        System.Data.SqlClient.SqlDataAdapter DataAdapter =
            new System.Data.SqlClient.SqlDataAdapter();
        DataAdapter.SelectCommand = Command;
        DataAdapter.Fill(DataTable);
        return DataTable;
    }
}

c# & # 39;使用# 39;声明的问题

您可以像这样堆叠语句(在早期初始化所有一次性对象)

using (...)
using (...)
{
  ...
}

或者你可以为你需要的每个一次性对象使用嵌套的using语句

using (...)
{
   using (...) { ... }
   using (...) { ... }
}

只有在using子句中创建的对象才会被丢弃。如果您想确保自动为using块中创建的每个一次性对象生成dispose调用,则需要将它们每个都包装在using子句中(或者您可以只调用dispose或close,当然,无论它们支持哪种)。所以,答案是否定的。

No。您必须对不在using语句参数内的那些显式调用Dispose