Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Ez a cikk áttekintést nyújt az adatbázis-objektumok sql Server-integrációval történő fordításához szükséges névterekről és kódtárakról a .NET-keretrendszer közös nyelvi futtatókörnyezetével (CLR). A cikk azt is bemutatja, hogyan írhat, fordíthat le és futtathat egy kis CLR-ben tárolt, C# és Visual Basic .NET nyelven írt eljárást.
Kötelező névterek
Az alapvető CLR-adatbázis-objektumok fejlesztéséhez szükséges összetevők az SQL Serverrel vannak telepítve. A CLR integrációs funkciói a .NET-keretrendszer részét képező System.Data.dllnevű szerelvényben lesznek közzétéve. Ez a szerelvény a globális szerelvény-gyorsítótárban (GAC) és a .NET-keretrendszer könyvtárában található. A parancssori eszközök és a Visual Studio általában automatikusan hozzáad egy erre a szerelvényre mutató hivatkozást, így nem kell manuálisan hozzáadni.
A System.Data.dll szerelvény a következő névtereket tartalmazza, amelyek a CLR-adatbázisobjektumok összeállításához szükségesek:
System.DataSystem.Data.SqlMicrosoft.SqlServer.ServerSystem.Data.SqlTypes
Borravaló
A CLR-adatbázisobjektumok Linuxon való betöltése támogatott, de a .NET-keretrendszerrel kell létrehozni őket (az SQL Server CLR-integráció nem támogatja a .NET Core- vagy .NET 5-ös és újabb verziókat). A EXTERNAL_ACCESS vagy UNSAFE engedélykészlettel rendelkező CLR-szerelvények linuxos rendszereken sem támogatottak.
Az "Hello World" tárolt eljárás megírása
Másolja és illessze be a következő C# vagy Visual Basic .NET kódot egy szövegszerkesztőbe, majd mentse egy helloworld.cs vagy helloworld.vbnevű fájlba.
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!";
}
}
Ez a program egyetlen statikus metódust tartalmaz egy nyilvános osztályon. Ez a metódus két új osztályt használ, SqlContext és SqlPipe, a felügyelt adatbázis-objektumok létrehozásához, hogy rövid szöveges üzenetet jelenítsen meg. A metódus a "Hello world!" sztringet is hozzárendeli egy out paraméter értékeként. Ez a metódus tárolt eljárásként deklarálható az SQL Serverben, majd ugyanúgy futtatható, mint egy Transact-SQL tárolt eljárás.
Fordítsa le ezt a programot könyvtárként, töltse be az SQL Serverbe, és futtassa tárolt eljárásként.
A "Hello World" tárolt eljárás fordítása
Az SQL Server alapértelmezés szerint telepíti a .NET-keretrendszer újraterjesztési fájljait. Ezek a fájlok tartalmazzák a C# és a Visual Basic .NET programok parancssori fordítóit, csc.exe és vbc.exe. A minta fordításához módosítania kell az elérési út változóját, hogy a csc.exe vagy vbc.exetartalmazó könyvtárra mutasson. Az alábbi elérési út a .NET-keretrendszer alapértelmezett telepítési útvonala.
C:\Windows\Microsoft.NET\Framework\(version)
A verzió tartalmazza a telepített .NET-keretrendszer verziószámát. Például:
C:\Windows\Microsoft.NET\Framework\v4.8.0
Miután hozzáadta a .NET-keretrendszer könyvtárát az elérési úthoz, a minta tárolt eljárást lefordíthatja egy összeállításba az alábbi paranccsal. A /target opció lehetővé teszi, hogy lefordítsa egy assembly kódba.
C#-forrásfájlok esetén:
csc /target:library helloworld.cs
Visual Basic .NET-forrásfájlok esetén:
vbc /target:library helloworld.vb
Ezek a parancsok elindítják a C# vagy a Visual Basic .NET fordítót a /target beállítással a kódtár DLL-jének létrehozásához.
Töltse be és futtassa a "Hello World" tárolt eljárást az SQL Serveren
A mintaeljárás sikeres fordítása után tesztelheti azt az SQL Serveren. Ehhez nyissa meg az SQL Server Management Studiót, és hozzon létre egy új lekérdezést, és csatlakozzon egy megfelelő tesztadatbázishoz (például a AdventureWorks2025 mintaadatbázishoz).
A közös nyelvi futtatókörnyezeti (CLR) kód végrehajtásának lehetősége alapértelmezés szerint OFF az SQL Serverben. A CLR-kód a sp_configure rendszer által tárolt eljárással engedélyezhető. További információért lásd: Engedélyezze a CLR-integrációt.
Létre kell hoznunk a szerelvényt, hogy hozzáférhessünk a tárolt eljáráshoz. Ebben a példában feltételezzük, hogy a helloworld.dll szerelvényt a C:\ könyvtárban hozta létre. Adja hozzá a következő Transact-SQL utasítást a lekérdezéshez.
CREATE ASSEMBLY helloworld from 'C:\helloworld.dll' WITH PERMISSION_SET = SAFE
A szerelvény létrehozása után most már hozzáférhetünk a HelloWorld metódushoz a CREATE PROCEDURE utasítás használatával. A tárolt eljárást hellohívjuk:
CREATE PROCEDURE hello
(@i NCHAR (25) OUTPUT)
AS EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld;
Jegyzet
Az előző példában, ha a HelloWorldProc osztály egy névtérben (más néven MyNS) található, a létrehozási eljárás utasításának utolsó sora EXTERNAL NAME helloworld.[MyNS.HelloWorldProc].HelloWorld;lesz.
Az eljárás létrehozása után ugyanúgy futtatható, mint a Transact-SQL-ben írt normál tárolt eljárás. Hajtsa végre a következő parancsot:
DECLARE @J AS NCHAR (25);
EXECUTE hello @J OUTPUT;
PRINT @J;
Itt a várt kimenet.
Hello world!
Hello world!
Távolítsa el a "Hello World" tárolt eljárásmintát
Ha befejezte a minta tárolt eljárás futtatását, eltávolíthatja az eljárást és a szerelvényt a tesztadatbázisból.
Először távolítsa el az eljárást a drop procedure paranccsal.
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'hello')
DROP PROCEDURE hello;
Miután az eljárást elvetették, eltávolíthatja a mintakódot tartalmazó szerelvényt.
IF EXISTS (SELECT name
FROM sys.assemblies
WHERE name = 'helloworld')
DROP ASSEMBLY helloworld;