.NET

15 dez, 2017

Usando CLR no SQL Server

Publicidade

.NET Framework CLR + SQL Server

“A partir do SQL Server 2005, o SQL Server apresenta a integração do componente CLR do .NET Framework para o Microsoft Windows. Isso significa que você pode agora gravar procedimentos armazenados, gatilhos, tipos definidos pelo usuário, funções definidas pelo usuário, agregações definidas pelo usuário e funções de streaming com valor de tabela, usando qualquer linguagem do .NET Framework, incluindo o Microsoft Visual Basic .NET e o Microsoft Visual C#.” – Microsoft.

Como citado acima, podemos criar CLRs para o SQL Server. Dessa forma teremos um Gatilho, Função ou uma Procedure compilada em uma linguagem como o C#. Não necessariamente ficamos limitados ao C#, mais podemos usar qualquer outra que seja suportada pelo .NET Framework, exemplo (VB.Net).

Em alguns casos (CLR) pode chegar a ser mais rápido que as próprias instruções T-SQL. E por que usar?! Eu utilizo pra tratar informações grandes do lado “client” antes mesmo de devolver o retorno pra o usuário.

Por exemplo, eu faço um select no banco, manipulo essas informações e só então devolvo o resultado formatado com as informações que foram manipuladas, um caso prático de clientes que geram SPED FISCAL. Ele poderá reunir essas informações via select, fazer os ajustes e devolver para um DataReader(no nosso Caso .NET) as informações já processadas para serem gravadas em um Arquivo.

Vamos criar nosso projeto e veremos em prática isso. Mas antes de tudo, vamos criar nosso banco de teste.

Execute o script abaixo que criei pra nosso exemplo:

Só pra controle, estaremos usando o “SQL SERVER”

CREATE DATABASE BancoTeste; 
go 
 
USE BancoTeste;
go 
 
SP_CONFIGURE 'clr enabled',1 RECONFIGURE WITH OVERRIDE; 
GO
 
RECONFIGURE; 
GO
 
ALTER DATABASE BancoTeste SET TRUSTWORTHY ON 
GO 
 
CREATE TABLE NossaTabela
(
id int primary key identity not null,
descricao varchar(50)
);
go
 
insert into NossaTabela(descricao) values('Teste Descricao 01');
insert into NossaTabela(descricao) values('Teste Descricao 02');
insert into NossaTabela(descricao) values('Teste Descricao 03');
insert into NossaTabela(descricao) values('Teste Descricao 04');
insert into NossaTabela(descricao) values('Teste Descricao 05');
insert into NossaTabela(descricao) values('Teste Descricao 06');
insert into NossaTabela(descricao) values('Teste Descricao 07');
GO

Usando o Microsoft Visual Studio, podemos criar um projeto de banco de dado do SQL Server.

Ao adicionar um item “SQL CLR C # Stored Procedure” ao projeto, podemos criar um procedimento armazenado CLR.

Aqui está a class pra quem não quiser digitar:

using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
 
public partial class StoredProcedures
{
    [SqlProcedure]
    public static void ListarTabelaCLR()
   {
        using (var con = new SqlConnection("context connection=true"))
       {
             con.Open();
            using (var cmd = new SqlCommand("select * from NossaTabela", con))
           {
                  var reader = cmd.ExecuteReader();
                  SqlContext.Pipe.Send(reader);
           }
      }
   }
}

Compile o Projeto (CTRL + SHIFT + B). Feito isso, rode o script abaixo no banco que criamos logo acima.

IF(EXISTS(select * from sys.objects where name = ' ProcedureCLR')) 
exec('DROP PROCEDURE ProcedureCLR'); 
GO 
 
IF (EXISTS(select * from sys.assemblies where name = 'MinhaClr')) 
BEGIN 
exec('DROP ASSEMBLY MinhaClr'); 
END 
go
 
CREATE ASSEMBLY MinhaClr FROM 'R:\RafaelNuvem\GitHub\ProjetosComunidade\ClrCSharp\MinhaClr.dll' with PERMISSION_SET =UNSAFE;
go
CREATE PROCEDURE [dbo].[ListarTabelaCLR] AS EXTERNAL NAME [MinhaClr].[StoredProcedures].[ListarTabelaCLR] 
go

Observações:

  • Lembre de substituir “R:\RafaelNuvem\GitHub\ProjetosComunidade\ClrCSharp\MinhaClr.dll” pelo diretório onde compilou seu projeto!
  • O comando “SP_CONFIGURE ‘clr habilitado’ , 1” habilita no SQL Server a Integração do CLR.
  • O comando “ALTER DATABASE BancoTeste SET TRUSTWORTHY ON” irá autorizar a integração com assemblies de terceiros.

Vamos agora testar nossa CLR.

Espero que goste. Até a próxima!

Fonte: