Есть ли случай, когда необходима следующая структура?
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
.
В какой-то момент моя программа делает следующее (не может опубликовать код , потому что он включает в себя множество классов; в основном у меня есть мини-фреймворк, создающий множество объектов):
Parameter
s. GetDataTable ('sp_one', параметры)
. GetDataTable ('sp_two', parameters)
.