Preciso usar uma DLL de terceiros em um código c # de gatilho no SQL Server CLR
Mas quando tento adicionar referência, apenas mostra algumas DLLs do SQL Server.
Como posso adicionar minha DLL de terceiros ao SQL Server?
Preciso usar uma DLL de terceiros em um código c # de gatilho no SQL Server CLR
Mas quando tento adicionar referência, apenas mostra algumas DLLs do SQL Server.
Como posso adicionar minha DLL de terceiros ao SQL Server?
Respostas:
Você só pode adicionar referências aos assemblies que foram registrados no Sql Server. Se eles não estiverem registrados, eles não aparecerão na caixa de diálogo Adicionar referências.
Existem várias etapas para registrar uma DLL, primeiro reconfigure seu banco de dados:
ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;
Feito isso, o Sql Server está ativado para CLR. Em seguida, você precisará registrar sua montagem:
CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE
Se esse último script for executado corretamente, o assembly agora está registrado e aparecerá na caixa de diálogo Adicionar referências.
O que você precisará considerar, porém, é a segurança do aplicativo da configuração do Sql Server CLR:
SAFE
, somente em circunstâncias excepcionais você deve usar EXTERNAL_ACCESS
ou UNSAFE
.Assembly.Load()
é propositadamente restrito.UNSAFE
.context connection = true;
) é executado no contexto do usuário conectado, portanto, você precisa ter certeza de que acesso essa biblioteca tem aos seus dados.Suponho que você esteja perguntando sobre alternativas para instalar assemblies SQL CLR do Visual Studio.
Não é necessário ter o código no Visual Studio.
A implantação de Objetos de Banco de Dados CLR no MSDN detalha as opções, incluindo instruções SQL e scripts de implantação.
Eu uso uma DLL de terceiros muito grande que pega uma página da Web e a converte em PDF.
O PDF é salvo em um compartilhamento de arquivos e o banco de dados é atualizado quanto à sua localização e tipo.
Este é um processo de três etapas:
Crie um aplicativo de console que use a DLL de terceiros para criar o PDF e aceite a URL e o FilePath como parâmetros e retorne o tamanho e o número de páginas do PDF.
Crie um procedimento armazenado CLR que chame o aplicativo de console no servidor
Agrupo tudo isso em um único procedimento armazenado que chama o aplicativo CLR para criar o PDF e, em seguida, escrevo metadados sobre ele no banco de dados.
Sei que isso não é perfeito e de maneira alguma você deve fazer algo tão louco dentro de um gatilho!
Eu apenas o mencionei aqui para outras pessoas com perguntas sobre o uso de DLLs de terceiros em seus CLR.
Minha esperança é que, girando um console do cmd.exe para executar a DLL de terceiros, em vez de executar tudo em processo, se houver uma falha, isso não afetará tanto o SQL Server. É o que eu espero.
Por favor, comente se esta é uma abordagem realmente ruim e por quê.