Bagikan melalui


Memulai Integrasi CLR

Topik ini memberikan gambaran umum tentang namespace dan pustaka yang diperlukan untuk mengkompilasi objek database menggunakan integrasi SQL Server dengan .NET Framework runtime bahasa umum (CLR). Topik ini juga menunjukkan kepada Anda cara menulis, mengkompilasi, dan menjalankan prosedur tersimpan CLR sederhana yang ditulis dalam Microsoft Visual C#.

Namespace yang Diperlukan

Dimulai dengan SQL Server. Fungsionalitas integrasi CLR diekspos dalam rakitan yang disebut system.data.dll, yang merupakan bagian dari .NET Framework. Rakitan ini dapat ditemukan di Global Assembly Cache (GAC) serta di direktori .NET Framework. Referensi ke rakitan ini biasanya ditambahkan secara otomatis oleh alat baris perintah dan Microsoft Visual Studio, sehingga tidak perlu menambahkannya secara manual.

Rakitan system.data.dll berisi namespace berikut, yang diperlukan untuk mengkompilasi objek database CLR:

System.Data

System.Data.Sql

Microsoft.SqlServer.Server

System.Data.SqlTypes

Menulis Prosedur Tersimpan "Halo Dunia" Sederhana

Salin dan tempel kode Visual C# atau Microsoft Visual Basic berikut ke editor teks, dan simpan dalam file bernama "helloworld.cs" atau "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  
  

Program sederhana ini berisi satu metode statis pada kelas publik. Metode ini menggunakan dua kelas baru, SqlContext dan SqlPipe, untuk membuat objek database terkelola untuk menghasilkan pesan teks sederhana. Metode ini juga menetapkan string "Halo dunia!" sebagai nilai parameter keluar. Metode ini dapat dinyatakan sebagai prosedur tersimpan dalam prosedur tersimpan Transact-SQL.

Kami sekarang akan mengkompilasi program ini sebagai pustaka, memuatnya ke SQL Server, dan menjalankannya sebagai prosedur tersimpan.

Mengkompilasi Prosedur Tersimpan "Halo Dunia"

Microsoft .NET Framework file redistribusi secara default. File-file ini termasuk csc.exe dan vbc.exe, pengkompilasi baris perintah untuk program Visual C# dan Visual Basic. Untuk mengkompilasi sampel kami, Anda harus memodifikasi variabel jalur Anda untuk menunjuk ke direktori yang berisi csc.exe atau vbc.exe. Berikut ini adalah jalur penginstalan default .NET Framework.

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

Versi berisi nomor versi .NET Framework terinstal yang dapat didistribusikan ulang. Contohnya:

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

Setelah menambahkan direktori .NET Framework ke jalur, Anda dapat mengkompilasi sampel prosedur tersimpan ke dalam rakitan dengan perintah berikut. Opsi ini /target memungkinkan Anda untuk mengkompilasinya ke dalam perakitan.

Untuk file sumber Visual C#:

csc /target:library helloworld.cs   

Untuk file sumber Visual Basic:

vbc /target:library helloworld.vb  

Perintah ini meluncurkan pengkompilasi Visual C# atau Visual Basic menggunakan opsi /target untuk menentukan pembuatan DLL pustaka.

Memuat dan Menjalankan Prosedur Tersimpan "Halo Dunia" di SQL Server

Setelah prosedur sampel berhasil dikompilasi, Anda dapat mengujinya di SQL Server Management Studio dan membuat kueri baru, menyambungkan ke database pengujian yang sesuai (misalnya, database sampel AdventureWorks).

Kemampuan untuk menjalankan kode runtime bahasa umum (CLR) diatur ke NONAKTIF secara default di SQL Server. Kode CLR dapat diaktifkan dengan menggunakan prosedur tersimpan sistem sp_configure . Untuk informasi selengkapnya, lihat Mengaktifkan Integrasi CLR.

Kita perlu membuat assembly sehingga kita dapat mengakses prosedur tersimpan. Untuk contoh ini, kami akan berasumsi bahwa Anda telah membuat rakitan helloworld.dll di C:\ Direktori. Tambahkan pernyataan T-SQL berikut ke kueri Anda.

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

Setelah perakitan dibuat, kita sekarang dapat mengakses metode HelloWorld kita dengan menggunakan pernyataan buat prosedur. Kami akan memanggil prosedur tersimpan kami "halo":

  
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  

Setelah prosedur dibuat, prosedur dapat dijalankan seperti prosedur tersimpan normal yang ditulis dalam Transact-SQL. Jalankan perintah berikut:

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

Ini akan menghasilkan output berikut di jendela pesan SQL Server Management Studio.

Hello world!  
Hello world!  

Menghapus Sampel Prosedur Tersimpan "Halo Dunia"

Setelah selesai menjalankan prosedur tersimpan sampel, Anda dapat menghapus prosedur dan perakitan dari database pengujian Anda.

Pertama, hapus prosedur menggunakan perintah drop procedure.

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

Setelah prosedur dihilangkan, Anda dapat menghapus rakitan yang berisi kode sampel Anda.

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

Lihat juga

Prosedur Tersimpan CLR
SQL Server In-Process Ekstensi Khusus untuk ADO.NET
Men-debug Objek Database CLR
Keamanan Integrasi CLR