2012-06-20 4 views
1

Есть ли способ отслеживать подключение к базе данных для перерывов? У меня есть одно соединение, разделенное между приложениями, и некоторые объекты должны реагировать на прерывание соединения.. Как отслеживать прерывание соединения db?

В идеале это должно быть событие. Единственное, что я нашел, это исключение соединения, но оно возникает локально (где я слушаю исключения).

У меня есть идея унаследовать от DbConnection и прослушивать исключение в этом объекте (перегружая его методы), поднимая сигнал на исключение ошибки соединения (связанным кодом). Но, возможно, это самый простой способ.

Благодарим вас за идеи.

+0

Что вы пытаетесь достичь? – BrokenGlass

+0

Некоторые процессы (объекты) должны прекратить работу по прерыванию соединения и ждать повторного подключения. – Fanda

ответ

7

Совместное использование одного соединения никогда не бывает хорошим и оно IS Плохая практика. Главная причина - на самом деле ваша проблема. Я предлагаю вам немного изменить свой дизайн (не большое дело) и полагаться на подключение к ADO.NET . Это должно быть на случай, если вы не хотите сталкиваться со всеми видами узких мест, особенно в ситуациях многопоточности.

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

Подробнее об этом можно узнать здесь here, где вы также можете найти образцы о том, как его использовать. Главное знать об этом - это использование одноразового шаблона.

//Notice the **using ** block 
using(SqlConnection conn = new SqlConnection(connString)) 
{ 
    conn.Open(); 
    //do something with the connection. 
    //as soon as the using block ends, the managed connection is disposed and released in the pool 
} 
+1

Поймал здесь @thecoon. Возможно, вам удастся написать такую ​​вещь, но она будет чрезмерной или очень хрупкой и по-прежнему не решает основной проблемы, что вы не должны продолжать соединение по умолчанию. –

+0

Ouch. :-) Да, это имеет смысл. Поэтому вместо распределения соединения я буду распространять строку соединения. – Fanda

+0

@Фанда: да, что-то в этом роде. Вы можете сохранить его в одном классе свойств или что-то подобное. –

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