Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC & exception / 7 сообщений из 7, страница 1 из 1
21.08.2007, 17:35
    #34742643
Lenie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC & exception
пожалуйста просветите

сервер MS SQL Server 2000
язык MS Visual C++ 2005, программирование SQL на чистом ODBC API.

хотела вызовы ODBC функций вставить в try-catch. Столкнулась с 2мя проблемами:
1) не знала какой класс занимается обработкой исключений ODBC API функций. Написала наугад вот так, компилятор пропустил:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
try
{
    return_code = SQLExecute (m_hstmt);
}
catch (exception ex)
{
}
это правильно? или какой класс надо использовать?

2) при таком коде при попытке выполнить SQLExecute случается access violation. Крэш происходит из-за неправильного handle statement, это ясно. Но мой вопрос в другом: как сберечь программу от крэша, как написать код, чтобы исключения не валили всё наповал? Хочу вызовы некоторых ODBC API функций завернуть в обработчки исключений.
...
Рейтинг: 0 / 0
21.08.2007, 17:56
    #34742737
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC & exception
Lenieпожалуйста просветите


хотела вызовы ODBC функций вставить в try-catch. Столкнулась с 2мя проблемами:
1) не знала какой класс занимается обработкой исключений ODBC API функций. Написала наугад вот так, компилятор пропустил:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
try
{
    return_code = SQLExecute (m_hstmt);
}
catch (exception ex)
{
}
это правильно? или какой класс надо использовать?

Ну обработкой исключений точно должен заниматься ваш код, некому больше... Но сначала почитайте главу 14 Страуструпа
Lenie
2) при таком коде при попытке выполнить SQLExecute случается access violation. Крэш происходит из-за неправильного handle statement, это ясно. Но мой вопрос в другом: как сберечь программу от крэша, как написать код, чтобы исключения не валили всё наповал? Хочу вызовы некоторых ODBC API функций завернуть в обработчки исключений.
От этого уже не убережешься.Access violation означает что вы обратились к нусуществующему сегменту памяти. А это уже кирдык со сломенной памятью лучше не работать. Да и причина поломки скорее всего не в коде ODBC драйвера, в это сделали вероятнее всего несколько раньше
...
Рейтинг: 0 / 0
21.08.2007, 18:11
    #34742797
Lenie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC & exception
blindedНу обработкой исключений точно должен заниматься ваш код, некому больше... Но сначала почитайте главу 14 Страуструпа
хорошо
в "моей" книге Страустрапа нет главы 14, но я поняла что надо читать
blindedОт этого уже не убережешься.Access violation означает что вы обратились к нусуществующему сегменту памяти. А это уже кирдык со сломенной памятью лучше не работать. Да и причина поломки скорее всего не в коде ODBC драйвера, в это сделали вероятнее всего несколько раньше
ну, я подозревала что даже обработчику исключений придется попытаться пройти через кривые адреса памяти... :)
причина крэша выяснилась, но мой вопрос касался в целом защиты от таких вот ситуаций (короче, размечталась)

спасибо за ответ
...
Рейтинг: 0 / 0
21.08.2007, 18:28
    #34742853
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC & exception
Lenieхотела вызовы ODBC функций вставить в try-catch.Бессмысленно. API процедурного типа никогда не кидает исключений. Все информация об ошибках идет через коды возврата.

Lenie1) не знала какой класс занимается обработкой исключений ODBC API функций. Написала наугад вот так, компилятор пропустил:У ODBC API не бывает исключений. И конечно компилятор пропустит оборачивание любого кода не кидающего исключения в try{}catch. Это будет бессмысленно, но таков уж С++.

Lenie2) при таком коде при попытке выполнить SQLExecute случается access violation. Крэш происходит из-за неправильного handle statement, это ясно.Это совсем не ясно. Более того, это невозможно. Если ты конечно используешь настоящий ODBC API а не чей-то кривой враппер.
В настоящем ODBC API, пре передаче неправильного параметра SQLExecute вернет SQL_INVALID_HANDLE и никакого крэша никогда не будет.
...
Рейтинг: 0 / 0
21.08.2007, 18:30
    #34742861
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC & exception
Lenie blindedНу обработкой исключений точно должен заниматься ваш код, некому больше... Но сначала почитайте главу 14 Страуструпа
хорошо
в "моей" книге Страустрапа нет главы 14, но я поняла что надо читать

O_O Бьерн Страуструп Язык программирования С++ Специальное издание глава 14 Обработка исключений
Специально за книжкой лазил...
Lenie
blindedОт этого уже не убережешься.Access violation означает что вы обратились к нусуществующему сегменту памяти. А это уже кирдык со сломенной памятью лучше не работать. Да и причина поломки скорее всего не в коде ODBC драйвера, в это сделали вероятнее всего несколько раньше
ну, я подозревала что даже обработчику исключений придется попытаться пройти через кривые адреса памяти... :)
причина крэша выяснилась, но мой вопрос касался в целом защиты от таких вот ситуаций (короче, размечталась)

спасибо за ответ
Налицо явное непонимание... ODBC не причем, и что там сломалось никто уже не скажет, как и о степени разрушений... Мне известны случаи когда программа падала через 1- 1.5 часа после фактической поломки памяти, причем не стабильно...
Просто тщательнее надо
...
Рейтинг: 0 / 0
22.08.2007, 01:15
    #34743379
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC & exception
Lenie пишет:
> Автор: "Lenie"
> пожалуйста просветите
>
> сервер MS SQL Server 2000
> язык MS Visual C++ 2005, программирование SQL на чистом ODBC API.
>
> хотела вызовы ODBC функций вставить в try-catch. Столкнулась с 2мя
> проблемами:
> 1) не знала какой класс занимается обработкой исключений ODBC API
> функций.

Никакой. ODBC API не использует исключений, поскольку
это API для языка C. SEH ODBC также не использует,
поскольку какая-никакая, а кроссплатформенная библиотека.

Написала наугад вот так, компилятор пропустил:
>
А он и не должен не пропускать.

>
> это правильно? или какой класс надо использовать?
Это - правильно , поскольку не содержит ошибок.
Но исключений таких никогда не будет. См. выше.

> 2) при таком коде при попытке выполнить SQLExecute случается access
> violation. Крэш происходит из-за неправильного handle statement, это
> ясно. Но мой вопрос в другом: как сберечь программу от крэша, как
> написать код, чтобы исключения не валили всё наповал? Хочу вызовы
> некоторых ODBC API функций завернуть в обработчки исключений.

Хочешь - заверни. Это - правильный путь чтобы защититься от крэшей.
Но неправильный путь написания программ - на таком ODBC -программа
падать не должна. Надо исправлять ошибку, а не ловить исключения от нее.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
22.08.2007, 09:38
    #34743708
Lenie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ODBC & exception
у меня не было цели прятать ошибки, я хотела чтобы законченная система работала стабильно, но теперь ясно по поводу исключений и ОДБС.

СПАСИБО всем!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / ODBC & exception / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]