Доступ к данным в конструкторах статического класса SQLCLR - PullRequest
4 голосов
/ 16 апреля 2011

В сборке SQL-CLR.
Есть ли способ, который позволяет мне загружать определенные данные и, возможно, читать из базы данных на только загрузка сборки ?
Допустим, у меня есть класс пользовательских функций, эти функции используют некоторые регулярные выражения, которые должны быть построены и скомпилированы на основе данных в некоторых таблицах, которые у меня есть в БД. Есть ли способ, которым я могу читать из таблиц, Создайте мои объекты Regex и оставьте эти объекты живыми в течение всего срока службы AppDomian. Чтобы при вызове любой пользовательской функции, использующей эти объекты, ей не приходилось перестраивать их?

РЕДАКТИРОВАТЬ: Статические конструкторы не являются допустимым контекстом для чтения данных.

Надеюсь, я достаточно ясно выразился, заранее спасибо.

Ответы [ 2 ]

1 голос
/ 18 августа 2015

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

Это зависит от того, насколько вы гибки с расположением этих «определенных данных» и / или PERMISSION_SET сборки.

Если сборка должна оставаться как SAFE (что предпочтительно, если это вообще возможно), то только два источника, которые можно прочитать из внешних по отношению к сборке:

  • переменные окружения
  • файл app.config (подробности см. В моем ответе на этот вопрос S.O.: Поддерживает ли SQL Server CLR Integration файлы конфигурации? - и да, он также работает с разделом appSettings). ОБНОВЛЕНИЕ: Пока что кажется, что чтение из файла конфигурации не работает в Linux (новая платформа с SQL Server 2017).

Хотя ни один из них не является «динамическим», как чтение из этой таблицы, можно настроить триггер в этой таблице настроек для записи соответствующих данных в файл sqlservr.exe.config . Я бы точно не рекомендовал это для таблицы с высокой степенью транзакций, но я предполагаю, что значения для этих целей не меняются так часто, тем более что планируется все равно кэшировать их в static readonly переменных класса.

Если сборка уже установлена ​​на EXTERNAL_ACCESS, то вы можете сделать обычный / внешний SqlConnection для получения данных из БД. Однако, если по этой причине only вы устанавливаете сборку на EXTERNAL_ACCESS, я бы выбрал параметр конфигурации, упомянутый выше, поскольку производительность лучше для детерминированных методов, если сборка установлена ​​на SAFE.

0 голосов
/ 16 апреля 2011

Я думаю, что поведение немного изменилось между различными версиями SQL-сервера, но статические конструкторы могут помочь: http://msdn.microsoft.com/en-us/library/k9x6w0hc(v=vs.80).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...