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;
Powiązana zawartość
- CLR procedury składowane
- rozszerzenia specyficzne dla programu SQL Server do ADO.NET
- Jak debugować obiekty bazy danych CLR
- zabezpieczeń integracji środowiska
CLR