Чтобы объяснить необходимость далее, рассмотрим следующий сценарий:
В устаревшей системе, которая в значительной степени опирается на TRIGGERS
, нам нужно предоставить какой-то токен (назовем его «SessionID») для вставки в некоторые таблицы журнала безопасности. Этот токен создается в C # на сервере приложений и передается в все команды SQL.
ПЛОХО, ЭТО ТРЕБОВАНИЕ К ТРИГГЕРАМ НЕИЗМЕННО
Итак, поскольку у меня есть доступ для изменения строки подключения, я могу (и успешно доказал, что могу) использовать токен «Имя приложения» для предоставления этой информации.
string connectionString = string.Format("SERVER=sql.example.com; "
+ "DATABASE=someDB; User ID=xyz; Password=123; Application Name={0}", sID);
Так как это работает, в чем проблема?
Проблема очень проста ... вышесказанное работает, но поскольку у нас тысячи пользователей ... наш пул соединений уничтожен (поскольку пулы соединений создаются на основе строки соединения ... в основном, мне нужны пул соединений должен основываться на всем , за исключением свойства Application Name
).
Итак, вы знаете, как я могу:
- Установите свойство в строке подключения, которое НЕ будет включено в пул.
- Установите контекстное свойство для этого соединения другим способом, который не сильно сказывается на производительности.
Как примечание ... Я мог бы открыть соединение сразу и создать временную таблицу с одним значением:
SELECT 12345 AS SessionID INTO #context
Но это кажется невероятно излишним!