Udostępnij za pośrednictwem


Wprowadzenie do integracji środowiska CLR

Dotyczy:programu SQL Server

Ten artykuł zawiera omówienie przestrzeni nazw i bibliotek wymaganych do kompilowania obiektów bazy danych przy użyciu integracji programu SQL Server ze środowiskiem uruchomieniowym języka wspólnego programu .NET Framework (CLR). W tym artykule pokazano również, jak napisać, skompilować i uruchomić małą procedurę składowaną CLR napisaną w językach C# i Visual Basic .NET.

Wymagane przestrzenie nazw

Składniki wymagane do opracowywania podstawowych obiektów bazy danych CLR są instalowane za pomocą programu SQL Server. Funkcje integracji środowiska CLR są uwidocznione w zestawie o nazwie System.Data.dll, który jest częścią programu .NET Framework. Ten zestaw można znaleźć w globalnej pamięci podręcznej zestawów (GAC) i w katalogu .NET Framework. Zazwyczaj odwołanie do tego zestawu jest automatycznie dodawane zarówno przez narzędzia wiersza polecenia, jak i program Visual Studio, więc nie ma potrzeby ręcznego dodawania go.

Zestaw System.Data.dll zawiera następujące przestrzenie nazw, które są wymagane do kompilowania obiektów bazy danych CLR:

  • System.Data
  • System.Data.Sql
  • Microsoft.SqlServer.Server
  • System.Data.SqlTypes

Napiwek

Ładowanie obiektów bazy danych CLR w systemie Linux jest obsługiwane, ale należy je skompilować przy użyciu programu .NET Framework (integracja środowiska CLR z programem SQL Server nie obsługuje platformy .NET Core ani .NET 5 i nowszych wersji). Ponadto zestawy CLR z zestawem uprawnień EXTERNAL_ACCESS lub UNSAFE nie są obsługiwane w systemie Linux.

Napisz procedurę składowaną "Hello World"

Skopiuj i wklej następujący kod C# lub Visual Basic .NET do edytora tekstów i zapisz go w pliku o nazwie helloworld.cs lub 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!";
    }
}

Ten program zawiera pojedynczą metodę statyczną w klasie publicznej. Ta metoda używa dwóch nowych klas, SqlContext i SqlPipe, do tworzenia zarządzanych obiektów bazy danych w celu wyprowadzenia krótkiego komunikatu tekstowego. Metoda przypisuje również ciąg "Hello world!" jako wartość parametru out. Tę metodę można zadeklarować jako procedurę składowaną w programie SQL Server, a następnie uruchomić w taki sam sposób, jak procedura składowana Transact-SQL.

Skompiluj ten program jako bibliotekę, załaduj go do programu SQL Server i uruchom go jako procedurę składowaną.

Skompiluj procedurę składowaną "Hello World"

Program SQL Server domyślnie instaluje pliki redystrybucji programu .NET Framework. Te pliki obejmują csc.exe i vbc.exe, kompilatory wiersza polecenia dla programów C# i Visual Basic .NET. Aby skompilować nasz przykład, należy zmodyfikować zmienną ścieżki, aby wskazywała katalog zawierający csc.exe lub vbc.exe. Poniższa ścieżka to domyślna ścieżka instalacji programu .NET Framework.

C:\Windows\Microsoft.NET\Framework\(version)

Wersja zawiera numer wersji zainstalowanego programu .NET Framework. Na przykład:

C:\Windows\Microsoft.NET\Framework\v4.8.0

Po dodaniu katalogu .NET Framework do ścieżki, możesz skompilować przykładową procedurę składowaną w zestaw za pomocą następującego polecenia. Opcja /target umożliwia skompilowanie jej do zestawu.

W przypadku plików źródłowych języka C#:

csc /target:library helloworld.cs

W przypadku plików źródłowych platformy .NET w języku Visual Basic:

vbc /target:library helloworld.vb

Te polecenia uruchamiają kompilator języka C# lub Visual Basic platformy .NET przy użyciu opcji /target w celu określenia tworzenia biblioteki DLL.

Ładowanie i uruchamianie procedury składowanej "Hello World" w programie SQL Server

Po pomyślnym skompilowaniu przykładowej procedury można ją przetestować w programie SQL Server. W tym celu otwórz program SQL Server Management Studio i utwórz nowe zapytanie, łącząc się z odpowiednią testową bazą danych (na przykład przykładową bazą danych AdventureWorks2022).

Możliwość wykonywania kodu środowiska uruchomieniowego języka wspólnego (CLR) w programie SQL Server jest ustawiona domyślnie na OFF. Kod CLR można włączyć przy użyciu procedury składowanej systemu sp_configure. Aby uzyskać więcej informacji, zobacz Włącz integrację CLR.

Musimy utworzyć zestaw, aby uzyskać dostęp do procedury składowanej. W tym przykładzie przyjęto założenie, że utworzono zestaw helloworld.dll w katalogu C:\. Dodaj następującą instrukcję Transact-SQL do zapytania.

CREATE ASSEMBLY helloworld from 'C:\helloworld.dll' WITH PERMISSION_SET = SAFE

Po utworzeniu zestawu możemy teraz uzyskać dostęp do naszej metody HelloWorld przy użyciu instrukcji CREATE PROCEDURE. Nazywamy naszą procedurę składowaną hello:

CREATE PROCEDURE hello
(@i NCHAR (25) OUTPUT)
AS EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld;

Notatka

W poprzednim przykładzie, jeśli klasa HelloWorldProc znajduje się wewnątrz przestrzeni nazw (o nazwie MyNS), ostatni wiersz instrukcji create procedure będzie EXTERNAL NAME helloworld.[MyNS.HelloWorldProc].HelloWorld;.

Po utworzeniu procedury można ją uruchomić tak samo jak zwykła procedura składowana napisana w języku Transact-SQL. Wykonaj następujące polecenie:

DECLARE @J AS NCHAR (25);
EXECUTE hello @J OUTPUT;
PRINT @J;

Oto oczekiwane dane wyjściowe.

Hello world!
Hello world!

Usuń przykład procedury składowanej "Hello World"

Po zakończeniu uruchamiania przykładowej procedury składowanej możesz usunąć procedurę i zestaw z testowej bazy danych.

Najpierw usuń procedurę za pomocą polecenia drop procedure.

IF EXISTS (SELECT name
           FROM sysobjects
           WHERE name = 'hello')
    DROP PROCEDURE hello;

Po usunięciu procedury można usunąć zestaw zawierający przykładowy kod.

IF EXISTS (SELECT name
           FROM sys.assemblies
           WHERE name = 'helloworld')
    DROP ASSEMBLY helloworld;