J'ai besoin d'utiliser une DLL tierce dans un code déclencheur c # dans SQL Server CLR
Mais lorsque j'essaie d'ajouter une référence, cela montre simplement quelques DLL de SQL Server.
Comment puis-je ajouter ma DLL tierce à SQL Server?
J'ai besoin d'utiliser une DLL tierce dans un code déclencheur c # dans SQL Server CLR
Mais lorsque j'essaie d'ajouter une référence, cela montre simplement quelques DLL de SQL Server.
Comment puis-je ajouter ma DLL tierce à SQL Server?
Réponses:
Vous pouvez uniquement ajouter des références aux assemblys qui ont été enregistrés auprès de Sql Server. S'ils ne sont pas enregistrés, ils n'apparaîtront pas dans la boîte de dialogue Ajouter des références.
Il y a un certain nombre d'étapes que vous devrez effectuer pour enregistrer une DLL, vous devrez d'abord reconfigurer votre base de données:
ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;
Une fois cela fait, Sql Server est activé CLR. Ensuite, vous devrez enregistrer votre assemblage:
CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE
Si ce dernier script s'exécute correctement, l'assembly est maintenant enregistré et apparaîtra dans la boîte de dialogue Ajouter des références.
Ce que vous devrez cependant prendre en compte, c'est la sécurité des applications de votre configuration Sql Server CLR:
SAFE
, uniquement dans des circonstances exceptionnelles si vous utilisez EXTERNAL_ACCESS
ou UNSAFE
.Assembly.Load()
est volontairement restreint.UNSAFE
.context connection = true;
) s'exécute dans le contexte de l'utilisateur connecté, vous devez donc vous assurer que vous êtes au courant de l'accès de cette bibliothèque à vos données.Je suppose que vous posez des questions sur les alternatives à l'installation des assemblys SQL CLR à partir de Visual Studio.
Il n'est pas nécessaire d'avoir le code dans Visual Studio.
Le déploiement d'objets de base de données CLR sur MSDN détaille les options, y compris les instructions SQL et les scripts de déploiement.
J'utilise une très grande DLL tierce qui prend une page Web et la convertit en PDF.
Le PDF est enregistré sur un partage de fichiers et la base de données est mise à jour quant à son emplacement et son type.
Il s'agit d'un processus en 3 étapes:
Créez une application console qui utilise la DLL tierce pour créer le PDF et accepter l'URL et FilePath comme paramètres et renvoie la taille et le nombre de pages du PDF.
Créer une procédure stockée CLR qui appelle ensuite l'application console sur le serveur
J'enveloppe tout cela dans une seule procédure stockée qui appelle l'application CLR pour créer le PDF, puis j'écris des métadonnées à ce sujet dans la base de données.
Je me rends compte que ce n'est pas parfait et en aucun cas vous ne devriez faire quelque chose d'aussi fou dans un déclencheur!
Je ne le mentionne ici que pour d'autres qui ont des questions sur l'utilisation de DLL tierces dans leur CLR.
Mon espoir est qu'en faisant tourner une console cmd.exe pour exécuter la DLL tierce, au lieu d'exécuter tout en cours, si elle se bloque, cela n'affectera pas autant SQL Server. Voilà ce que j'espère.
Veuillez commenter s'il s'agit d'une très mauvaise approche et pourquoi.