ADO и обработка исключений - PullRequest
1 голос
/ 20 сентября 2010

У меня есть следующая функция, написанная кем-то другим, однако я переписываю это приложение, и мне просто интересно, нет ли лучшего способа сделать обработку исключений, кроме простого возврата того, что было первоначально передано функции?

CComVariant GetFldVar(ADO_RsPtr rs, long nIndex, CComVariant def)
{
    try
    {
        return rs->GetFields()->GetItem(nIndex)->GetValue();
    }
    catch (...)
    {
        return def;  // catch exception and just return old variable?? Is that the right way to go about things??
    }
}

Ответы [ 2 ]

0 голосов
/ 20 сентября 2010

То, что было передано функции, было то, что вызывающая сторона считала правильным значением по умолчанию (или даже указывающим на ошибку).Теперь вызывающий абонент обязан проверить результат и определить, что делать.Дело в том, что таким образом он / она не может знать, что за ошибка произошла.Он может проверить коллекцию ошибок соединения, но они являются только ошибками ADO (хотя я не думаю, что в этом коде есть место для других видов ошибок).Кроме этого, мне кажется, что этот способ хорошо работает.

0 голосов
/ 20 сентября 2010

По умолчанию используется значение Def, т. Е. Функция пытается извлечь столбец n из текущей строки (rs) и в случае сбоя возвращает значение по умолчанию. Я не думаю, что это ошибка, а конкретный случай использования. Это довольно стандартный шаблон, позволяющий вызывающей стороне избегать проверки пропущенных значений esp. из БД и указать значение по умолчанию в качестве запасного.

Сказав это, это может быть ошибкой, поскольку она проглатывает серьезные ошибки, однако, возможно, код написан так, что вызывающий может продолжить независимо от того, как результат вызова ADO.

...