powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обработка ошибок при работе с MS SQL Server
12 сообщений из 12, страница 1 из 1
Обработка ошибок при работе с MS SQL Server
    #39796356
Yurik_Tuturik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал небольшую программку с кодом типа:
Код: c#
1.
2.
3.
4.
5.
System.Data.SqlClient.SqlCommand SqlCmd = new System.Data.SqlClient.SqlCommand();
SqlCmd.Connection = _conn;
SqlCmd.CommandText = "INSERT INTO [Vasya]([WhatToDo]) VALUES('Ничего не делать')";
SqlCmd.Timeout = 10;
SqlCmd.ExecuteNonQuery();


обработку ощибок не делал. После определённых событий и прочтения статьи 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 писать уже некуда?
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796363
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurik_TuturikНаписал небольшую программку с кодом типа:
Код: c#
1.
2.
3.
4.
5.
System.Data.SqlClient.SqlCommand SqlCmd = new System.Data.SqlClient.SqlCommand();
SqlCmd.Connection = _conn;
SqlCmd.CommandText = "INSERT INTO [Vasya]([WhatToDo]) VALUES('Ничего не делать')";
SqlCmd.Timeout = 10;
SqlCmd.ExecuteNonQuery();


обработку ощибок не делал. После определённых событий и прочтения статьи 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 писать уже некуда?

зачем вам это? у вас один запрос-одна команда, она не прошла, п-ц.
Если хотите красиво сделать - сделайте процедуру и в ней колбасьтесь
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796370
Yurik_Tuturik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда все, кто работает с MS SQL Server должны писать свой код через хранимые процедуры. Зачем тогда сам Microsoft в своих примерах предлагает описанный мной подход(правда без обработки ошибок)?
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796373
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurik_Tuturik,
Отмену делают если более 1 команды.
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796376
Yurik_Tuturik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro_123, вопрос в том, что делать при ошибке или при завершении по тайм-ауту
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796401
Yurik_Tuturik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro_123, в статье написано, что к ошибкам на сервере могут приводить сценарии приложений
авторScenarios that may result in uncommitted transactions:
An application design that assumes that all errors cause rollbacks.

в основном в связи с этим и возникают вопросы по первой ситуации. Как я узнаю когда прошёл rollback, а когда нет? Всегда в случае ошибки на сервере делать rollback? Или остаётся только 1 вариант - хранимые процедуры?
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796414
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurik_TuturikPetro_123, вопрос в том, что делать при ошибке или при завершении по тайм-аутуtry не ставить. Поставить только в самом верху на buttons_click(
И мессаге по ошибкам.
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796418
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurik_TuturikКак я узнаю когда прошёл rollback, а когда нет?пример придумай с двумя командами МОДИФИКАЦИИ данных.
Подскажем.
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796426
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurik_Tuturikв основном в связи с этим и возникают вопросы по первой ситуации. Как я узнаю когда прошёл rollback, а когда нет? Всегда в случае ошибки на сервере делать rollback? Или остаётся только 1 вариант - хранимые процедуры?
В данном случае, как было написано выше, будет неявная тразакция с неявными же коммитом/роллбэком при успехе/ошибке, и никаких доп. телодвижений делать не нужно (да и не получится). Хотите использовать @@TRANCOUNT, проверку xact_state(), и проч. - пишите ХП с явным открытием транзакции и блоками begin try.. end try begin catch.. end catch, внутри проверяйте, всё, что нужно.
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796450
Yurik_Tuturik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны, спасибо. Решение вопроса понятно. Тему можно закрывать
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796453
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurik_Tuturikсоcтояние транзакции через @@TRANCOUNTя бы не использовал, учитывая тренд на веб, линуксы и разные базы под EF.
...
Рейтинг: 0 / 0
Обработка ошибок при работе с MS SQL Server
    #39796537
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yurik_TuturikТогда все, кто работает с MS SQL Server должны писать свой код через хранимые процедуры. Зачем тогда сам Microsoft в своих примерах предлагает описанный мной подход(правда без обработки ошибок)?


чтобы даже при обломе одной команды было ясно, что облом произошел, и далее - повторять, написать юзеру "превед", и т.д. - решает писатель кода.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обработка ошибок при работе с MS SQL Server
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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