Мені потрібно використовувати DLL сторонньої сторони в тригерному коді c # в CLR SQL Server
Але коли я намагаюся додати посилання, він просто показує деякі DLL з SQL Server.
Як я можу додати свій сторонній dll до SQL Server?
Мені потрібно використовувати DLL сторонньої сторони в тригерному коді c # в CLR SQL Server
Але коли я намагаюся додати посилання, він просто показує деякі DLL з SQL Server.
Як я можу додати свій сторонній dll до SQL Server?
Відповіді:
Ви можете додавати посилання лише на ті збори, які були зареєстровані на сервері Sql. Якщо вони не зареєстровані, вони не відображатимуться у діалоговому вікні Додати посилання.
Для реєстрації DLL вам потрібно виконати декілька кроків. По-перше, вам потрібно буде налаштувати свою базу даних:
ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;
Після цього сервер Sql увімкнено CLR. Далі вам потрібно зареєструвати свою збірку:
CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE
Якщо цей останній скрипт працює правильно, збірка тепер зареєстрована і з’явиться в діалоговому вікні «Додати посилання».
Що вам потрібно враховувати, це безпека програми для вашої конфігурації CLR сервера Sql:
SAFE
тільки у виняткових випадках, якщо ви їх використовуєте EXTERNAL_ACCESS
або UNSAFE
.Assembly.Load()
це цілеспрямовано обмежено.UNSAFE
.context connection = true;
), працює в контексті підключеного користувача, тому вам потрібно переконатися, що ви знаєте, який доступ має бібліотека до ваших даних.Я припускаю, що ви запитуєте про альтернативи встановлення збірок SQL CLR від Visual Studio.
Наявність коду у Visual Studio не потрібно.
Розгортання об’єктів бази даних CLR в MSDN детально описує параметри, включаючи оператори SQL та сценарії розгортання.
Я використовую дуже велику сторонній DLL, який займає веб-сторінку і перетворює її в PDF.
PDF зберігається на загальному файлі, а база даних оновлюється відповідно до місця розташування та типу.
Це триетапний процес:
Створіть консольний додаток, який використовує сторонній DLL для створення PDF-файлу та приймає URL-адресу та FilePath як параметри та повертає розмір та кількість PDF-сторінок.
Створіть процедуру зберігання CLR, яка потім викликає консольний додаток на сервері
Я обертаю це все в єдину збережену процедуру, яка викликає додаток CLR для створення PDF-файлу, а потім записую метадані про нього в базу даних.
Я усвідомлюю, що це не ідеально, і ні в якому разі не слід робити щось таке божевільне всередині тригера!
Я згадую це лише для інших із запитаннями про використання сторонніх DLL у своїх CLR.
Я сподіваюсь, що, віджимаючи консоль cmd.exe для запуску сторонньої DLL, замість того, щоб запускати все в програмі, якщо вона вийде з ладу, це не вплине так сильно на SQL Server. На це я сподіваюся.
Прокоментуйте, будь ласка, чи це дійсно поганий підхід і чому.