Sql исключение в winforms форме обработки лучших практик - PullRequest
0 голосов
/ 18 августа 2011

с использованием c # vs2008 winforms.

Мои стандартные формы имеют типичный шаблон использования
Форма загрузки
Sqlconnection объект открыт.

наборы данных для чтения / записи с использованием sqldataadaptors
читать много вещей, используя читателей sql
написать много данных, используя хранимые процедуры для записи

закрыть sql соединение
закрыть форму

Итак, каков наилучший способ обработки исключений в этом типе схемы использования? Я прилагаю весь код чтения и записи к серверу sql в предложениях catch для отлова исключений.

Так что мне делать, когда я ловлю исключение?
Должен ли я закрыть и удалить все объекты sql?
Должен ли я закрыть форму и утилизировать ее?
Если я попытаюсь позволить пользователю продолжить на
Должен ли я попытаться повторно открыть свой sqlconnection, если исключение состоит в том, что соединение sql разорвано?
Учитывая, что я открываю и закрываю соединения при загрузке и закрытии формы, так как он только теоретически открывается один раз и закрывается один раз с большим количеством операций чтения и записи между ними.

Я просто не уверен, какое действие я должен предпринять, чтобы перехватить исключение, чтобы предотвратить утечку памяти и ресурсов.

любой совет приветствуется

спасибо

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Это зависит от полученного вами исключения и его серьезности. Если это была ошибка с номером 1205, вам нужно повторить попытку, так как это ошибка взаимоблокировки SQL Server. * 1001 например *

catch (SqlException sqlEx)
{    
    if (sqlEx.Number == 1205)    
    {        
        // Deadlock occurred, retry...    
    }    
    else        
        throw;
}

При неустранимых ошибках вы хотите очистить и утилизировать соединения и т. Д.

Рекомендуется использовать блоки using всякий раз, когда объект реализует IDisposable (например, SqlConnection, SqlCommand и т. Д.)

Чтобы получить полный список кодов ошибок, запустите этот TSQL:

SELECT * FROM sysmessages
0 голосов
/ 18 августа 2011

Возможно, вы захотите не оставлять SqlConnection открытым в течение всего срока действия вашей формы. Время жизни формы контролируется пользователем, поэтому в данный момент время жизни SqlConnections также контролируется пользователем, что не является хорошей идеей; блокировки в базе данных могут оставаться открытыми до тех пор, пока SqlConnection не закроется. В многопользовательской системе это может увеличить конкуренцию за заблокированные записи - вы будете потенциально блокировать других пользователей, в то время как ваши формы имеют открытое соединение.

Лучше открывать и закрывать соединение для определенных действий в форме, например, когда пользователь нажимает кнопку. Поскольку пул соединений реализован автоматически под прикрытием, вам не следует беспокоиться о накладных расходах при многократном открытии и закрытии соединений - это будет минимизировано пулами соединений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...