Udostępnij za pośrednictwem


Wprowadzenie do środowiska CLR integracja

This topic provides an overview of the namespaces and libraries required to compile database objects using the Microsoft SQL Server integration with the .NET Framework common language runtime (CLR).Temat również pokazuje, jak napisać, skompilować i uruchomić prostą procedurę CLR przechowywane w Microsoft Program Visual C#.

Wymagane obszarów nazw

Zaczyna się od SQL Server 2005, składniki wymagane do podstawowych obiektów bazy danych do środowiska CLR rozwijania są instalowane razem z SQL Server. Funkcje integracja CLR jest dostępny w zestawie o nazwie system.data.dll, który jest częścią systemu .NET Framework.Tego wirtualny plik dziennika można znaleźć w pamięci podręcznej w globalnej wirtualny plik dziennika Cache (GAC) również w katalogu .NET Framework.Odwołanie do tego wirtualny plik dziennika jest zazwyczaj dodawane automatycznie przez oba narzędzi wiersza polecenia i Microsoft Program Visual Studio, dzięki czemu nie ma potrzeby ręcznego dodawania.

wirtualny plik dziennika system.data.dll zawiera następujące obszary nazw, które są wymagane do kompilowania CLR obiektów bazy danych:

System.Data

System.Data.Sql

Microsoft.SqlServer.Server

System.Data.SqlTypes

Zapisywanie Simple A "Hello World „ procedura przechowywana

Skopiuj i wklej następujący C Visual # lub MicrosoftVisual Basic kodu w edytorze tekstu 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!";
    }
}
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

To prosty program zawiera pojedynczy statyczna metoda w klasie publicznych.Metoda ta korzysta z dwóch nowych klas SqlContext i SqlPipe, do tworzenia obiektów bazy danych zarządzanych do wysyłania wiadomości zwykłego tekstu. Metoda przypisuje ciąg "Witaj świecie!" jako wartość parametru wyjściowego.Ta metoda może być zadeklarowana jako procedurę przechowywaną w SQL Server, a następnie uruchom w taki sam sposób jak Transact-SQL Procedura przechowywana.

Firma Microsoft będzie teraz skompilować ten program jako biblioteki, należy załadować je do SQL Server, i uruchom go jako procedura przechowywana.

Kompilowanie "Hello World „ procedura przechowywana

SQL Server instaluje Microsoft Domyślnie, system .NET framework redystrybucji pliki. Plików tych należą csc.exe i vbc.exe, kompilatory wiersza polecenia dla programu Visual C# i Visual Basic programów.Aby skompilować próbce, należy zmodyfikować Twoje zmienna ścieżka do katalogu zawierającego csc.exe lub vbc.exe pkt.Poniżej przedstawiono domyślną ścieżka instalacji systemu .NET Framework.

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

Wersja zawiera numer wersji zainstalowanej .NET Framework przeznaczony do redystrybucji.Na przykład:

C:\Windows\Microsoft.NET\Framework\v2.0.31113

Po dodaniu do swojego ścieżka katalogu .NET Framework, będzie można kompilować procedura przechowywana próbki do wirtualny plik dziennika przy użyciu następującego polecenia.The /target option allows you to compile it into an wirtualny plik dziennika.

Dla programu Visual C# urządzenie źródłowe plików:

csc /target:library helloworld.cs 

Dla plików źródłowych języka Visual Basic:

vbc /target:library helloworld.vb

Te polecenia Uruchom kompilatora Visual C# i Visual Basic przy użyciu opcji /miejsce docelowe określić budowanie biblioteki DLL.

Ładowanie i uruchamianie "Hello World „ procedura przechowywana w programie SQL Server

Gdy procedura próbki został pomyślnie skompilowany, można przetestować ją w SQL Server. Aby to zrobić, otwórz SQL Server Management Studio i Utwórz nową kwerendę, łączenia się z odpowiednim testowej bazy danych (na przykład AdventureWorks przykładowej bazy danych).

Umożliwia wykonać kodu (CLR) w czasie wykonywania języka wspólnego jest ustawiona na wyłączona domyślnie w SQL Server. Kod środowiska CLR może być włączone za pomocą sp_configure systemu procedura przechowywana.Aby uzyskać więcej informacji zobaczWłączanie CLR integracja.

Firma Microsoft konieczne jest utworzenie wirtualny plik dziennika, dzięki czemu firma Microsoft może uzyskać dostęp do procedura przechowywana.Na przykład firma Microsoft przyjmie założenie, że wirtualny plik dziennika helloworld.dll został utworzony w katalogu C:\.Dodaj poniżej Transact-SQL Instrukcja do kwerendy.

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

Po utworzeniu wirtualny plik dziennika firma Microsoft obecnie dostępne metoda naszych HelloWorld przy użyciu instrukcja procedury tworzenia.Firma Microsoft będzie wywoływać "hello" nasze procedura przechowywana:

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

Po utworzeniu procedury mogą być uruchamiane tak samo jak normalne procedura przechowywana w Transact-SQL. Wydaj następujące polecenie:

DECLARE @J nchar(25)
EXEC hello @J out
PRINT @J

Powinno to spowodować następujące dane wyjściowe w SQL Server Management Studio okno wiadomości.

Hello world!
Hello world!

Usuwanie przykładowa procedura przechowywana "Hello World. „

Po zakończeniu uruchamiania próbki procedura przechowywana, procedura i wirtualny plik dziennika można usunąć z testowej bazy danych.

Najpierw należy usunąć procedury za pomocą polecenia procedury upuszczania.

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'hello')
   drop procedure hello

Gdy procedura został odrzucony, można usunąć wirtualny plik dziennika zawierający kod przykładowy.

IF EXISTS (SELECT name FROM sys.assemblies WHERE name = 'helloworld')
   drop assembly helloworld