Necesito usar una DLL de terceros en un código de activación de C # en SQL Server CLR
Pero cuando intento agregar una referencia, solo muestra algunas DLL de SQL Server.
¿Cómo puedo agregar mi dll de terceros a SQL Server?
Necesito usar una DLL de terceros en un código de activación de C # en SQL Server CLR
Pero cuando intento agregar una referencia, solo muestra algunas DLL de SQL Server.
¿Cómo puedo agregar mi dll de terceros a SQL Server?
Respuestas:
Solo puede agregar referencias a los ensamblados que se han registrado con SQL Server. Si no están registrados, no aparecerán en el cuadro de diálogo Agregar referencias.
Hay una serie de pasos que necesitará para registrar una DLL, primero deberá reconfigurar su base de datos:
ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;
Una vez hecho esto, SQL Server está habilitado para CLR. A continuación, deberá registrar su ensamblaje:
CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE
Si este último script se ejecuta correctamente, el ensamblado ahora está registrado y aparecerá en el cuadro de diálogo Agregar referencias.
Sin embargo, lo que deberá tener en cuenta es la seguridad de la aplicación de la configuración CLR de su servidor SQL:
SAFE
, solo en circunstancias excepcionales debe usar EXTERNAL_ACCESS
o UNSAFE
.Assembly.Load()
está restringido a propósito.UNSAFE
.context connection = true;
) se ejecuta en el contexto del usuario conectado, por lo que debe asegurarse de saber qué acceso tiene esa biblioteca a sus datos.Supongo que está preguntando sobre alternativas para instalar ensamblados CLR de SQL desde Visual Studio.
No es necesario tener el código en Visual Studio.
La implementación de objetos de base de datos CLR en MSDN detalla las opciones, incluidas las instrucciones SQL y los scripts de implementación.
Utilizo una DLL de terceros muy grande que toma una página web y la convierte en un PDF.
El PDF se guarda en un archivo compartido y la base de datos se actualiza en cuanto a su ubicación y tipo.
Este es un proceso de 3 pasos:
Cree una aplicación de consola que use la DLL de terceros para crear el PDF y acepte la URL y FilePath como parámetros y devuelva el tamaño del PDF y el número de páginas.
Cree un procedimiento almacenado CLR que luego llame a la aplicación de consola en el servidor
Envuelvo todo esto en un único procedimiento almacenado que llama a la aplicación CLR para crear el PDF y luego escribo metadatos sobre él en la base de datos.
Me doy cuenta de que esto no es perfecto y de ninguna manera deberías hacer algo tan loco dentro de un gatillo.
Solo lo menciono aquí para otros que tengan preguntas sobre el uso de DLL de terceros en su CLR.
Mi esperanza es que al girar una consola cmd.exe para ejecutar la DLL de terceros, en lugar de ejecutar todo en el proceso, si se bloquea, no afectará negativamente tanto a SQL Server. Eso es lo que espero.
Comente si este es un enfoque realmente malo y por qué.