.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!