繁体   English   中英

C#'使用'声明问题

[英]C# 'using' statement question

如果使用using子句来处置连接,那么实现IDisposable的子句中的其他项是否也会自动处理? 如果没有,您如何处理确保所有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;
    }
}

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

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

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

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

仅处理在using子句中创建的对象。 如果要确保为使用块内创建的每个一次性对象自动生成对dispose的调用,则需要将每个对象包装在using子句中(或者您可以调用dispose或close,无论它们支持哪一个,课程)。 所以,答案不是。

不需要。您必须显式调用不在using语句参数内的Dispose

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM