lakovl, похоже, вы не понимаете, как работают исключения в C #.Для начала вы можете обратиться к статье MSDN об исключениях и обработке исключений , также просмотрите дочерние разделы.
Когда выдается исключение, это точка, в которойпроизошла ошибка, когда она обнаружена, она обрабатывается, а при повторном вызове через завернутое исключение это ссылка, по которой вы пытались устранить ошибку и не могли или просто ловили ее в журнале.
Чтобы бытьаналогично представьте, что у вас есть цепочка людей, прибыл грузовик с мороженым, и один человек просит кого-то пойти и купить им мороженое, они убежали к грузовику только для того, чтобы обнаружить, что первоначальный человек не дал им достаточноДеньги.Продавец мороженого выбрасывает исключение InsufficientFundsException
, которое поймано и повторно выброшено коллегой.Теперь, если коллеги достаточно щедры, они могут захотеть добавить находки для них, хотя, если у них также нет средств, они перезапустят исключение, свернув его.Наконец, они бегут обратно к инициатору (это называется пузырением), который они могут затем разрешить или прекратить.
Теперь давайте рассмотрим, что вы сделали с вашим исключением.То, что вы пытались сделать, - это создать тип исключения LibraryGeneralExceptions
, который подходит (за исключением формы множественного числа, отбросьте s
), хотя вы создали метод ItemInsertError
, который в вашем коде обрабатывает его так, как если бы онэто исключение само по себе.Итак, давайте попробуем исправить вашу проблему.
Во-первых, похоже, что вы намеревались использовать LibraryGeneralExceptions
в качестве подпространства имен, а ItemInsertError
- исключение, поэтому здесь правильная реализация:
namespace Database {
public class ItemInsertError : Exception {
public ItemInsertError() : base() {}
public void ItemInsertError(string message) : base(message) {}
}
}
Теперь давайте рассмотрим ваш метод вставки, первое, что неправильно, вы обрабатываете исключение и одновременно предупреждаете пользователя, вместо этого давайте просто обработаем исключение.
public void ItemInsert(string name,
string creator,
string publishing,
string itemType,
string genre,
string year) {
// ...
if (errorMsg.Length != 0) {
throw new ItemInsertError(errorMsg);
}
}
Итак, теперь, когда мы вызываем метод ItemInsert
, мы будем обрабатывать исключения в этом куске кода.
try {
ItemInsert("name", "creator", "publishing", "itemType", "genre", 2012);
} catch (ItemInsertError ex) {
MessageBox.Show(
ex.Message, "Error during insert",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
После этого ваш пользователь получит обратную связь о том, что пошло не так, ваш клиентский код теперь может попробоватьвосстановить, как в том случае, когда мой предыдущий пример решает, сможем ли мы найти больше средств или нет.