Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tópico fornece uma visão geral dos namespaces e bibliotecas necessários para compilar objetos de banco de dados usando a integração do SQL Server com o CLR (Common Language Runtime) do .NET Framework. O tópico também mostra como escrever, compilar e executar um procedimento armazenado CLR simples escrito no Microsoft Visual C#.
Namespaces necessários
Começando com o SQL Server. A funcionalidade de integração clr é exposta em um assembly chamado system.data.dll, que faz parte do .NET Framework. Esse assembly pode ser encontrado no GAC (Cache de Assembly Global), bem como no diretório do .NET Framework. Uma referência a esse assembly normalmente é adicionada automaticamente pelas ferramentas de linha de comando e pelo Microsoft Visual Studio, portanto, não é necessário adicioná-lo manualmente.
O assembly system.data.dll contém os seguintes namespaces, que são necessários para compilar objetos de banco de dados CLR:
System.Data
System.Data.Sql
Microsoft.SqlServer.Server
System.Data.SqlTypes
Escrevendo um procedimento armazenado simples "Olá, Mundo"
Copie e cole o código do Visual C# ou do Microsoft Visual Basic a seguir em um editor de texto e salve-o em um arquivo chamado "helloworld.cs" ou "helloworld.vb".
using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
public class HelloWorldProc
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void HelloWorld(out string text)
{
SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);
text = "Hello world!";
}
}
Imports System
Imports System.Data
Imports Microsoft.SqlServer.Server
Imports System.Data.SqlTypes
Imports System.Runtime.InteropServices
Public Class HelloWorldProc
<Microsoft.SqlServer.Server.SqlProcedure> _
Public Shared Sub HelloWorld(<Out()> ByRef text as String)
SqlContext.Pipe.Send("Hello world!" & Environment.NewLine)
text = "Hello world!"
End Sub
End Class
Este programa simples contém um único método estático em uma classe pública. Esse método usa duas novas classes SqlContext
e SqlPipe
, para criar objetos de banco de dados gerenciados para gerar uma mensagem de texto simples. O método também atribui a cadeia de caracteres "Olá, mundo!" como o valor de um parâmetro out. Esse método pode ser declarado como um procedimento armazenado em Transact-SQL procedimento armazenado.
Agora compilaremos esse programa como uma biblioteca, o carregaremos no SQL Server e o executaremos como um procedimento armazenado.
Compilando o procedimento armazenado "Olá, Mundo"
Arquivos de redistribuição do Microsoft .NET Framework por padrão. Esses arquivos incluem csc.exe e vbc.exe, os compiladores de linha de comando para os programas Visual C# e Visual Basic. Para compilar nosso exemplo, você deve modificar a variável de caminho para apontar para o diretório que contém csc.exe ou vbc.exe. Veja a seguir o caminho de instalação padrão do .NET Framework.
C:\Windows\Microsoft.NET\Framework\(version)
A versão contém o número de versão do .NET Framework redistribuível instalado. Por exemplo:
C:\Windows\Microsoft.NET\Framework\v2.0.31113
Depois de adicionar o diretório do .NET Framework ao seu caminho, você poderá compilar o procedimento armazenado de exemplo em um assembly com o comando a seguir. A /target
opção permite compilá-la em um assembly.
Para arquivos de origem do Visual C#:
csc /target:library helloworld.cs
Para arquivos de origem do Visual Basic:
vbc /target:library helloworld.vb
Esses comandos iniciam o compilador visual C# ou Visual Basic usando a opção /target para especificar a criação de uma DLL de biblioteca.
Carregando e executando o procedimento armazenado "Olá, Mundo" no SQL Server
Depois que o procedimento de exemplo tiver sido compilado com êxito, você poderá testá-lo no SQL Server Management Studio e criar uma nova consulta, conectando-se a um banco de dados de teste adequado (por exemplo, o banco de dados de exemplo adventureworks).
A capacidade de executar o código CLR (Common Language Runtime) é definida como OFF por padrão no SQL Server. O código CLR pode ser habilitado usando o procedimento armazenado do sistema sp_configure . Para obter mais informações, consulte Enabling CLR Integration.
Precisaremos criar o assembly para que possamos acessar o procedimento armazenado. Para este exemplo, presumiremos que você criou o assembly helloworld.dll no diretório C:\. Adicione a seguinte instrução Transact-SQL à consulta.
CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE
Depois que o assembly tiver sido criado, agora podemos acessar nosso método HelloWorld usando a instrução create procedure. Chamaremos nosso procedimento armazenado de "olá":
CREATE PROCEDURE hello
@i nchar(25) OUTPUT
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld
-- if the HelloWorldProc class is inside a namespace (called MyNS),
-- the last line in the create procedure statement would be
-- EXTERNAL NAME helloworld.[MyNS.HelloWorldProc].HelloWorld
Depois que o procedimento tiver sido criado, ele poderá ser executado como um procedimento armazenado normal escrito no Transact-SQL. Execute o comando a seguir:
DECLARE @J nchar(25)
EXEC hello @J out
PRINT @J
Isso deve resultar na saída a seguir na janela de mensagens do SQL Server Management Studio.
Hello world!
Hello world!
Removendo o exemplo de procedimento armazenado "Olá, Mundo"
Quando terminar de executar o procedimento armazenado de exemplo, você poderá remover o procedimento e o assembly do banco de dados de teste.
Primeiro, remova o procedimento usando o comando drop procedure.
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'hello')
drop procedure hello
Depois que o procedimento for removido, você poderá remover o assembly que contém o código de exemplo.
IF EXISTS (SELECT name FROM sys.assemblies WHERE name = 'helloworld')
drop assembly helloworld
Consulte Também
Procedures Armazenadas CLR
O SQL Server In-Process extensões específicas para ADO.NET
Depurando objetos de banco de dados CLR
Segurança da integração CLR