При использовании «using» и «finally» для очистки ресурсов

Есть ли случай, когда необходима следующая структура?

using (Something something = new Something())
{
    try
    {
    }
    finally
    {
        something.SomeCleanup();
    }
}

Или, все задачи очистки должны выполняться в неявном something.Dispose () ?


Вот код нарушения:

public static DataTable GetDataTable(string cmdText, IEnumerable<Parameter> parameters)
{
    // Create an empty memory table.
    DataTable dataTable = new DataTable();

    // Open a connection to the database.
    using (SqlConnection connection = new SqlConnection(ConfigurationTool.ConnectionString))
    {
        connection.Open();

        // Specify the stored procedure call and its parameters.
        using (SqlCommand command = new SqlCommand(cmdText, connection))
        {
            command.CommandType = CommandType.StoredProcedure;

            SqlParameterCollection parameterCollection = command.Parameters;
            foreach (Parameter parameter in parameters)
                parameterCollection.Add(parameter.SqlParameter);

            try
            {
                // Execute the stored procedure and retrieve the results in the table.
                using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
                    try
                    {
                        dataAdapter.Fill(dataTable);
                    }
                    catch
                    {
                        dataTable.Dispose();
                        dataTable = null;
                    }
            }
            finally
            {
                //parameterCollection.Clear();
            }
        }
    }

    return dataTable;
}

ПРИМЕЧАНИЕ: Я определил класс Parameter , чтобы пользователям этой функции не приходилось иметь дело с созданием ] SqlParameter напрямую. Свойство SqlParameter класса Parameter можно использовать для получения SqlParameter .

В какой-то момент моя программа делает следующее (не может опубликовать код , потому что он включает в себя множество классов; в основном у меня есть мини-фреймворк, создающий множество объектов):

  1. Создайте массив из Parameter s.
  2. GetDataTable ('sp_one', параметры) .
  3. GetDataTable ('sp_two', parameters) .
5
задан pyon 31 March 2011 в 15:09
поделиться