|
|
|
ODBC & exception
|
|||
|---|---|---|---|
|
#18+
пожалуйста просветите сервер 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. 2) при таком коде при попытке выполнить SQLExecute случается access violation. Крэш происходит из-за неправильного handle statement, это ясно. Но мой вопрос в другом: как сберечь программу от крэша, как написать код, чтобы исключения не валили всё наповал? Хочу вызовы некоторых ODBC API функций завернуть в обработчки исключений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 17:35 |
|
||
|
ODBC & exception
|
|||
|---|---|---|---|
|
#18+
Lenieпожалуйста просветите хотела вызовы ODBC функций вставить в try-catch. Столкнулась с 2мя проблемами: 1) не знала какой класс занимается обработкой исключений ODBC API функций. Написала наугад вот так, компилятор пропустил: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Ну обработкой исключений точно должен заниматься ваш код, некому больше... Но сначала почитайте главу 14 Страуструпа Lenie 2) при таком коде при попытке выполнить SQLExecute случается access violation. Крэш происходит из-за неправильного handle statement, это ясно. Но мой вопрос в другом: как сберечь программу от крэша, как написать код, чтобы исключения не валили всё наповал? Хочу вызовы некоторых ODBC API функций завернуть в обработчки исключений. От этого уже не убережешься.Access violation означает что вы обратились к нусуществующему сегменту памяти. А это уже кирдык со сломенной памятью лучше не работать. Да и причина поломки скорее всего не в коде ODBC драйвера, в это сделали вероятнее всего несколько раньше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 17:56 |
|
||
|
ODBC & exception
|
|||
|---|---|---|---|
|
#18+
blindedНу обработкой исключений точно должен заниматься ваш код, некому больше... Но сначала почитайте главу 14 Страуструпа хорошо в "моей" книге Страустрапа нет главы 14, но я поняла что надо читать blindedОт этого уже не убережешься.Access violation означает что вы обратились к нусуществующему сегменту памяти. А это уже кирдык со сломенной памятью лучше не работать. Да и причина поломки скорее всего не в коде ODBC драйвера, в это сделали вероятнее всего несколько раньше ну, я подозревала что даже обработчику исключений придется попытаться пройти через кривые адреса памяти... :) причина крэша выяснилась, но мой вопрос касался в целом защиты от таких вот ситуаций (короче, размечталась) спасибо за ответ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 18:11 |
|
||
|
ODBC & exception
|
|||
|---|---|---|---|
|
#18+
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 и никакого крэша никогда не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 18:28 |
|
||
|
ODBC & exception
|
|||
|---|---|---|---|
|
#18+
Lenie blindedНу обработкой исключений точно должен заниматься ваш код, некому больше... Но сначала почитайте главу 14 Страуструпа хорошо в "моей" книге Страустрапа нет главы 14, но я поняла что надо читать O_O Бьерн Страуструп Язык программирования С++ Специальное издание глава 14 Обработка исключений Специально за книжкой лазил... Lenie blindedОт этого уже не убережешься.Access violation означает что вы обратились к нусуществующему сегменту памяти. А это уже кирдык со сломенной памятью лучше не работать. Да и причина поломки скорее всего не в коде ODBC драйвера, в это сделали вероятнее всего несколько раньше ну, я подозревала что даже обработчику исключений придется попытаться пройти через кривые адреса памяти... :) причина крэша выяснилась, но мой вопрос касался в целом защиты от таких вот ситуаций (короче, размечталась) спасибо за ответ Налицо явное непонимание... ODBC не причем, и что там сломалось никто уже не скажет, как и о степени разрушений... Мне известны случаи когда программа падала через 1- 1.5 часа после фактической поломки памяти, причем не стабильно... Просто тщательнее надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 18:30 |
|
||
|
ODBC & exception
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2007, 01:15 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34742737&tid=2028328]: |
0ms |
get settings: |
11ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 519ms |

| 0 / 0 |
