Доброе время суток, много искал ответ но свой вопрос по форуму но не нашёл похожую проблему
И так — клиент на С# и база SQLServer 2000
Суть вопроса :
При подключении к базе пользователь должен активировать роль приложения.
Роль приложения действует только в течении сеанса — то есть пока соединение лежит в пуле.
Если в течении одного сеанса активировать роль дважды — вылетает исключение,
Если не сделать вовремя подключение к роли — пользователь не получит доступ к таблицам.
Проблема том, что бы поймать момент удаления соединения из пула.
Отказаться от пула — решает проблему, но появляется проблема в быстродействии.
Неприятность ещё в том, что в 2000 нельзя снять роль как в 2005, то есть только после удаления
соединения из пула.
Пробовал хитрить :
declare @ad varchar (10)
set @ad = (SELECT USER_NAME())
if 'Имя_Роли' <> @ad
begin
exec sp_setapprole 'Имя_Роли', 'Пароль_Роли'
end
— не помогло, хотя возможно я не корректно это делаю.
сделал тест — в форме при нажатии кнопки выполняется выше приведённый запрос.
Результат ещё больше запутал:
Первый раз всё нормально,
Второй раз за короткий промежуток (как я понял соединение ещё в пуле) — исключение.
Сразу третий раз — всё ок (типа роль снята)
четвёртый раз — //- -исключение.
Если между первым и вторым вызовом пауза достаточно большая (соединение покидает пул) — всё ок.
Большая просьба прокоментировать мои действия, где я ошибаюсь.
P.S. Мне нужна именно роль приложения...
Да, ещё — у меня выполняються последовательно по несколько запросов, по необходимости в них,
Каждое делае соединение — открывает — закрывает (с учётом работы пула) — то есть мне надо в
любой момент времени узнать роль приложения, либо, что эквивалентно, берётся ли соединение
из пула или создаётся в нём...
3 решения подключений к базе в моем блоге
здесь