Я решил удалить некоторые из операторов using в моем коде, чтобы я мог перехватить определенные исключения и обработать удаление ресурсов вручную.Я произвел рефакторинг некоторого кода, чтобы сделать его более читабельным и понятным, после реализации нового блока try / catch мне остается только задаться вопросом, правильно ли они были размещены для текущей задачи.
Пример:
public static DataTable Select(string table, string[] column, Object operand)
{
DataTable dTable = null;
SQLiteConnection connection = null;
SQLiteCommand command = null;
SQLiteDataReader dReader = null;
//convert to array for arguments
StringBuilder query = new StringBuilder();
query.Append("select ");
for (int i = 0; i < column.Length; i++)
{
query.Append(column[i]);
if (i < column.Length - 1)
{
query.Append(",");
}
}
query.Append(" from ");
query.Append(table);
try
{
connection = new SQLiteConnection(_connectionString);
command = new SQLiteCommand(query.ToString(), connection);
dTable = new DataTable();
connection.Open();
dReader = command.ExecuteReader();
dTable.Load(dReader);
return dTable;
}
catch (SQLiteException sqle)
{
//Handle exception
}
finally
{
connection.Dispose();
command.Dispose();
dReader.Dispose();
dTable.Dispose();
}
return null;
}
В этом примере я реализовал попытку / перехват только для самих операций SQL, я сделал это, поскольку он гарантирует, что любые исключения, которые выдают, могут быть отмечены, а ресурсы распределены правильно.Затем я заметил, что это оставило цикл for открытым для исключений, хотя поставляемый индексатор будет защищен и создан с помощью графического интерфейса.
Было бы целесообразно инкапсулировать весь метод в операторе try / catch или ябыть слишком осторожным?Можно сказать, что я ищу лучшую практику, когда дело доходит до управления размещением самих операторов.
Спасибо за ваше время!
Редактировать:
Я знаю, что заявление об использовании было бы идеальным с точки зрения обращения с утилизацией и управлением ресурсами, однако, как уже упоминалось в начале вопроса, я хотел бы иметь возможность отлавливать конкретные типы исключений, в частности те, которые сгенерированы изКомпоненты SQLite.