C # «использование» оператора вопрос - PullRequest
7 голосов
/ 25 апреля 2011

Если вы используете условие использования для удаления соединения, автоматически ли удаляются и другие элементы в предложении, которые реализуют 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;
    }
}

Ответы [ 3 ]

7 голосов
/ 25 апреля 2011

Вы можете сложить операторы следующим образом (для ранней инициализации всех одноразовых объектов)

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

или вы можете использовать вложенные операторы для каждого необходимого вам одноразового объекта

using (...)
{
   using (...) { ... }
   using (...) { ... }
}
3 голосов
/ 25 апреля 2011

Будет удален только объект, созданный в предложении using.Если вы хотите убедиться, что вызов dispose автоматически генерируется для каждого одноразового объекта, созданного внутри блока using, вам нужно будет обернуть каждый из них в предложение using (или вы можете просто вызвать dispose или close, в зависимости от того, что они поддерживают,курс).Таким образом, ответ - нет.

2 голосов
/ 25 апреля 2011

Нет.Вам придется явно вызывать Dispose для тех, которые не входят в параметры оператора using.

...