Можно ли закрыть или сломать SqlConnection повторно подключить, просто вызвав Open ()?

В моем методе, если я обнаружил, что полученное мной соединение (System.Data.SqlClient.SqlConnection)

  • State = Closed
    or
  • State = Broken

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

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

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

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


person miroxlav    schedule 27.01.2015    source источник
comment
возможный дубликат открытия SqlConnection, который уже был закрыт   -  person Banana    schedule 27.01.2015
comment
и this. и это   -  person Banana    schedule 27.01.2015
comment
@Banana - спасибо за помощь с поиском. Я их не нашел. Я оставлю этот вопрос опубликованным в качестве преимущества для других в качестве перенаправления к тем, которые вы разместили.   -  person miroxlav    schedule 27.01.2015


Ответы (1)


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

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

person Phate01    schedule 27.01.2015
comment
Я не понимаю вашего последнего предложения, почему я должен выбросить исключение. Из процитированного вами абзаца похоже, что Broken не всегда поддерживается. Так что я думаю, что в таких случаях я получу Closed и при Broken подключении. - person miroxlav; 27.01.2015
comment
Тогда вы можете просто рассматривать разорванное состояние как закрытое. В любом случае обычно, если вы получаете закрытое соединение в качестве параметра метода, вы более правильно генерируете исключение, чем повторно открываете соединение изнутри метода. Повторное подключение не является задачей метода - person Phate01; 27.01.2015
comment
Я думаю о методе обертки, который внутри вызывает стандартный SqlClient.SqlCommand() вместе с добавлением функции автоматического переподключения. Я не вижу дополнительных преимуществ в выдаче исключения (и прекращении всей начатой ​​работы), если возможно восстановление соединения под рукой. Это неправильный образ мышления? В любом случае, спасибо за ответ и добро пожаловать в Stack Overflow! - person miroxlav; 27.01.2015
comment
Спасибо, что поприветствовали! Это зависит от того, что вы собираетесь делать, но обычно методы выполняют одно-единственное действие. Возможно, вы можете попытаться повторно подключиться и выбросить исключение в случае сбоя - person Phate01; 28.01.2015
comment
Да, это то, чем я занимаюсь. Несколько повторных попыток, а затем исключение. - person miroxlav; 28.01.2015