|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Написал небольшую программку с кодом типа: Код: c# 1. 2. 3. 4. 5.
обработку ощибок не делал. После определённых событий и прочтения статьи https://support.microsoft.com/en-us/help/317375/a-transaction-log-grows-unexpectedly-or-becomes-full-in-sql-server возникли вопросы по поводу следующих 2 ситуаций: 1. При выполнении ExecuteNonQuery произошла ошибка на сервере(получили исключение типа SqlException)? 2. Выполнение ExecuteNonQuery завершилось по тайм-ауту. Вопросы: Что в этих случаях делать? Пытаться узнать соcтояние транзакции через @@TRANCOUNT или сразу rollback и т.п.? Но ведь при выполнении единичной команды типа insert на сервере должна была возникнуть неявная транзакция, доступа к которой я, наверное, не имею. А если при ошибке сервер закрыл соединение, то rollback писать уже некуда? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 12:24 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Yurik_TuturikНаписал небольшую программку с кодом типа: Код: c# 1. 2. 3. 4. 5.
обработку ощибок не делал. После определённых событий и прочтения статьи https://support.microsoft.com/en-us/help/317375/a-transaction-log-grows-unexpectedly-or-becomes-full-in-sql-server возникли вопросы по поводу следующих 2 ситуаций: 1. При выполнении ExecuteNonQuery произошла ошибка на сервере(получили исключение типа SqlException)? 2. Выполнение ExecuteNonQuery завершилось по тайм-ауту. Вопросы: Что в этих случаях делать? Пытаться узнать соcтояние транзакции через @@TRANCOUNT или сразу rollback и т.п.? Но ведь при выполнении единичной команды типа insert на сервере должна была возникнуть неявная транзакция, доступа к которой я, наверное, не имею. А если при ошибке сервер закрыл соединение, то rollback писать уже некуда? зачем вам это? у вас один запрос-одна команда, она не прошла, п-ц. Если хотите красиво сделать - сделайте процедуру и в ней колбасьтесь ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 12:29 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Тогда все, кто работает с MS SQL Server должны писать свой код через хранимые процедуры. Зачем тогда сам Microsoft в своих примерах предлагает описанный мной подход(правда без обработки ошибок)? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 12:33 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Yurik_Tuturik, Отмену делают если более 1 команды. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 12:38 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Petro_123, вопрос в том, что делать при ошибке или при завершении по тайм-ауту ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 12:44 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Petro_123, в статье написано, что к ошибкам на сервере могут приводить сценарии приложений авторScenarios that may result in uncommitted transactions: An application design that assumes that all errors cause rollbacks. в основном в связи с этим и возникают вопросы по первой ситуации. Как я узнаю когда прошёл rollback, а когда нет? Всегда в случае ошибки на сервере делать rollback? Или остаётся только 1 вариант - хранимые процедуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 12:56 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Yurik_TuturikPetro_123, вопрос в том, что делать при ошибке или при завершении по тайм-аутуtry не ставить. Поставить только в самом верху на buttons_click( И мессаге по ошибкам. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 13:07 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Yurik_TuturikКак я узнаю когда прошёл rollback, а когда нет?пример придумай с двумя командами МОДИФИКАЦИИ данных. Подскажем. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 13:09 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Yurik_Tuturikв основном в связи с этим и возникают вопросы по первой ситуации. Как я узнаю когда прошёл rollback, а когда нет? Всегда в случае ошибки на сервере делать rollback? Или остаётся только 1 вариант - хранимые процедуры? В данном случае, как было написано выше, будет неявная тразакция с неявными же коммитом/роллбэком при успехе/ошибке, и никаких доп. телодвижений делать не нужно (да и не получится). Хотите использовать @@TRANCOUNT, проверку xact_state(), и проч. - пишите ХП с явным открытием транзакции и блоками begin try.. end try begin catch.. end catch, внутри проверяйте, всё, что нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 13:13 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, спасибо. Решение вопроса понятно. Тему можно закрывать ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 13:47 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Yurik_Tuturikсоcтояние транзакции через @@TRANCOUNTя бы не использовал, учитывая тренд на веб, линуксы и разные базы под EF. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 13:56 |
|
Обработка ошибок при работе с MS SQL Server
|
|||
---|---|---|---|
#18+
Yurik_TuturikТогда все, кто работает с MS SQL Server должны писать свой код через хранимые процедуры. Зачем тогда сам Microsoft в своих примерах предлагает описанный мной подход(правда без обработки ошибок)? чтобы даже при обломе одной команды было ясно, что облом произошел, и далее - повторять, написать юзеру "превед", и т.д. - решает писатель кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2019, 15:09 |
|
|
start [/forum/topic.php?fid=20&msg=39796373&tid=1399015]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 279ms |
total: | 419ms |
0 / 0 |