Правлю достаточно старый проект, где очень много строчек типа:
SqlConnection conn = new SqlConnection(connectionString);
И вот через какое то время понадобилось отображать иконку статуса при любом обращении к базе данных. Грубо говоря надо как то реагировать на обращение апликухи к БД. Что можно предпринять по этому поводу?
Здравствуйте, andrewr, Вы писали:
A>Правлю достаточно старый проект, где очень много строчек типа:
A>
A>SqlConnection conn = new SqlConnection(connectionString);
A>
A>И вот через какое то время понадобилось отображать иконку статуса при любом обращении к базе данных. Грубо говоря надо как то реагировать на обращение апликухи к БД. Что можно предпринять по этому поводу?
Головой подумать. Непонятно, что надо.
Точно понятно, что вы не понимаете, как работает класс SqlConnection.
Возможно плохо сформулировал вопрос. Попробую немного по другому. Мне нужно что-то наподобие хука, который ловит любую попытку открыть приложением соединения с базой данных, а так же момент закрытия соединения. Один из вариантов, которые нашел — это проверять NumberOfActiveConnections (http://msdn.microsoft.com/en-us/library/ms254503.aspx), но никак не выходит активировать этот идентификатор.
AS>Точно понятно, что вы не понимаете, как работает класс SqlConnection.
Здравствуйте, andrewr, Вы писали:
A>а так же момент закрытия соединения.
Смотря что понимать под моментом закрытия соединения. Если вызов Close, то в этот момент соединение просто отдается обратно в пул, и не факт, что сразу же будет закрыто.
А вообще, какой смысл в этом отслеживании статуса?
Надеюсь, ваше приложение не держит соединение длительное время?
Здравствуйте, HowardLovekraft, Вы писали:
HL>Здравствуйте, andrewr, Вы писали:
A>>а так же момент закрытия соединения. HL>Смотря что понимать под моментом закрытия соединения. Если вызов Close, то в этот момент соединение просто отдается обратно в пул, и не факт, что сразу же будет закрыто.
HL>А вообще, какой смысл в этом отслеживании статуса? HL>Надеюсь, ваше приложение не держит соединение длительное время?
Нет, конечно. Суть в том, что бы просто отображать статус иконку всегда, когда приложение лезет в базу данных. Т.е. неважно — закрывается ли соединение, то ли отдается в пул, но с логической точки зрения оно считается закрытым. По сути надо отслеживать момент вызова команд Open и Close/Dispose. Если бы это был один класс, то было бы проще, ессно, но реально каждое соединение все таки зашивается в using.
По сути я сейчас додумался до решения проблемы. Заменить new SqlConnection() на вызов статической функции, типа CreateConnection, где я просто добавлю хэндлер на StatusChange. Ессно, придется пройтись по всему коду для того, что бы заменить первое на второе, но поиск мифического хука соизмерим по времени с тупой заменой.
Здравствуйте, andrewr, Вы писали:
A>Правлю достаточно старый проект, где очень много строчек типа:
A>
A>SqlConnection conn = new SqlConnection(connectionString);
A>
A>И вот через какое то время понадобилось отображать иконку статуса при любом обращении к базе данных. Грубо говоря надо как то реагировать на обращение апликухи к БД. Что можно предпринять по этому поводу?
Первое что приходит в голову — сделать свой класс, наследуемый от SQLConnection и сделать "обёртку" вокруг нужных методов, перегрузив их...
Здравствуйте, Slider_spb, Вы писали:
S_>Здравствуйте, andrewr, Вы писали:
A>>Правлю достаточно старый проект, где очень много строчек типа:
A>>
A>>SqlConnection conn = new SqlConnection(connectionString);
A>>
A>>И вот через какое то время понадобилось отображать иконку статуса при любом обращении к базе данных. Грубо говоря надо как то реагировать на обращение апликухи к БД. Что можно предпринять по этому поводу?
S_>Первое что приходит в голову — сделать свой класс, наследуемый от SQLConnection и сделать "обёртку" вокруг нужных методов, перегрузив их...
Это да, но класс SqlConnection sealed. Потому лучше таки сделать статическую функцию, где мы подготавливаем сам класс и добавляем там же хэндлер на ChangeState.
Чесслово — пока не запостил на форуме вопрос — не додумался
Здравствуйте, andrewr, Вы писали:
A>По сути я сейчас додумался до решения проблемы. Заменить new SqlConnection() на вызов статической функции, типа CreateConnection, где я просто добавлю хэндлер на StatusChange. Ессно, придется пройтись по всему коду для того, что бы заменить первое на второе, но поиск мифического хука соизмерим по времени с тупой заменой.
Самое главное — не забыть при закрытии соединения отписать хэндлер от StatusChange. Иначе есть риск утечки памяти.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.