2015-01-27 3 views
0

В моем методе, если я считаю, что соединение (System.Data.SqlClient.SqlConnection), который я получил имеетМожет быть закрыт или сломан SqlConnection снова подключен, вызвав Open()?

  • State = Closed
    или
  • State = Broken

, какие из следующих подходов является правильным?

  1. Позвоните Open(), чтобы повторно подключиться и продолжить выполнение последующих инструкций. (Конечно, я также могу дать Open() предварительно настроенное количество попыток.) ​​

  2. Выбросьте такое соединение как невосстановимое и получите новый.

(Если эти подходы одинаковы, я бы предпочел первое, как проще реализовать.)

+0

Возможный дубликат [Открытие закрытого соединения SqlConnection уже закрыто] (http://stackoverflow.com/questions/13992504/opening-sqlconnection-that-has-been-closed- уже) – Banana

+0

и [это] (http://stackoverflow.com/questions/4439409/open-close-sqlconnection-or-keep-open). и [This] (http://stackoverflow.com/questions/596339/re-opening-sqlconnection-instance) – Banana

+0

@Banana - спасибо за помощь в поиске. Я их не нашел. Я оставлю этот вопрос опубликованным как преимущество для других, как перенаправление тем, которые вы опубликовали. – miroxlav

ответ

0

(ConnectionState.Broken) Подключение к источнику данных нарушается. Это может произойти только после того, как соединение было открыто. Соединение в этом состоянии может быть закрыто, а затем снова открыто. (Это значение зарезервировано для будущих версий продукта.)

т. Е. Вы можете закрыть и снова открыть соединение с помощью Open(). Если государство закрыто, вы должны исключить исключение

+0

Я не понимаю твое последнее предложение, почему я должен выбросить исключение. Из параграфа, который вы цитировали, похоже, что «Broken» не всегда поддерживается. Поэтому я думаю, что в таких случаях я также получу 'Закрытый' и в случае соединения« Broken ». – miroxlav

+0

Тогда вы можете просто обработать разбитое состояние как закрытое. В любом случае, обычно, если вы получаете закрытое соединение в качестве параметра метода, вы вызываете исключение более правильно, чем повторно открываете соединение изнутри метода. Это не проблема метода для повторного подключения. – Phate01

+0

Я думаю о методе обертки, который внутри вызывает стандартный 'SqlClient.SqlCommand()' вместе с функцией автоматического повторного подключения в качестве функции. Я не вижу добавленной стоимости в исключении броска (и оставляя все начатые работы), если возможно, ремонт подключения под рукой. Это так неправильно? В любом случае, спасибо за ответ и добро пожаловать в [SO]! – miroxlav

Смежные вопросы