Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique fournit une vue d’ensemble des espaces de noms et bibliothèques nécessaires pour compiler des objets de base de données à l’aide de l’intégration de SQL Server au Common Language Runtime (CLR) du .NET Framework. La rubrique vous montre également comment écrire, compiler et exécuter une procédure stockée CLR simple écrite dans Microsoft Visual C#.
Espaces de noms requis
À compter de SQL Server. La fonctionnalité d’intégration CLR est exposée dans un assembly appelé system.data.dll, qui fait partie du .NET Framework. Cet assembly se trouve dans le Global Assembly Cache (GAC) ainsi que dans le répertoire .NET Framework. Une référence à cet assembly est généralement ajoutée automatiquement par les outils en ligne de commande et Microsoft Visual Studio. Il n’est donc pas nécessaire de l’ajouter manuellement.
L’assembly system.data.dll contient les espaces de noms suivants, qui sont requis pour compiler des objets de base de données CLR :
System.Data
System.Data.Sql
Microsoft.SqlServer.Server
System.Data.SqlTypes
Écriture d’une procédure stockée simple « Hello World »
Copiez et collez le code Visual C# ou Microsoft Visual Basic suivant dans un éditeur de texte, puis enregistrez-le dans un fichier nommé « helloworld.cs » ou « 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
Ce programme simple contient une méthode statique unique sur une classe publique. Cette méthode utilise deux nouvelles classes et SqlContextSqlPipe, pour créer des objets de base de données managés, pour générer un message texte simple. La méthode affecte également la chaîne « Hello world ! » comme valeur d’un paramètre out. Cette méthode peut être déclarée en tant que procédure stockée dans Transact-SQL procédure stockée.
Nous allons maintenant compiler ce programme en tant que bibliothèque, le charger dans SQL Server et l’exécuter en tant que procédure stockée.
Compilation de la procédure stockée « Hello World »
Fichiers de redistribution Microsoft .NET Framework par défaut. Ces fichiers incluent csc.exe et vbc.exe, les compilateurs de ligne de commande pour les programmes Visual C# et Visual Basic. Pour compiler notre exemple, vous devez modifier votre variable de chemin d’accès pour qu’elle pointe vers le répertoire contenant csc.exe ou vbc.exe. Voici le chemin d’installation par défaut du .NET Framework.
C:\Windows\Microsoft.NET\Framework\(version)
La version contient le numéro de version du .NET Framework installé redistribuable. Par exemple:
C:\Windows\Microsoft.NET\Framework\v2.0.31113
Une fois que vous avez ajouté le répertoire .NET Framework à votre chemin d’accès, vous pouvez compiler l’exemple de procédure stockée dans un assembly avec la commande suivante. L’option /target vous permet de la compiler dans un assembly.
Pour les fichiers sources Visual C# :
csc /target:library helloworld.cs
Pour les fichiers sources Visual Basic :
vbc /target:library helloworld.vb
Ces commandes lancent le compilateur Visual C# ou Visual Basic à l’aide de l’option /target pour spécifier la génération d’une DLL de bibliothèque.
Chargement et exécution de la procédure stockée « Hello World » dans SQL Server
Une fois l’exemple de procédure compilé, vous pouvez le tester dans SQL Server Management Studio et créer une requête, en vous connectant à une base de données de test appropriée (par exemple, l’exemple de base de données AdventureWorks).
La possibilité d’exécuter du code CLR (Common Language Runtime) est définie sur OFF par défaut dans SQL Server. Le code CLR peut être activé à l’aide de la procédure stockée système sp_configure . Pour plus d’informations, consultez Activation de l’intégration du CLR.
Nous devons créer l’assembly pour pouvoir accéder à la procédure stockée. Pour cet exemple, nous partons du principe que vous avez créé l’assembly helloworld.dll dans le répertoire C :\. Ajoutez l’instruction Transact-SQL suivante à votre requête.
CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE
Une fois l’assembly créé, nous pouvons désormais accéder à notre méthode HelloWorld à l’aide de l’instruction create procedure. Nous appellerons notre procédure stockée « hello » :
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
Une fois la procédure créée, elle peut être exécutée comme une procédure stockée normale écrite dans Transact-SQL. Exécutez la commande suivante :
DECLARE @J nchar(25)
EXEC hello @J out
PRINT @J
Cela doit entraîner la sortie suivante dans la fenêtre de messages SQL Server Management Studio.
Hello world!
Hello world!
Suppression de l’exemple de procédure stockée « Hello World »
Lorsque vous avez terminé d’exécuter l’exemple de procédure stockée, vous pouvez supprimer la procédure et l’assembly de votre base de données de test.
Tout d’abord, supprimez la procédure à l’aide de la commande drop procedure.
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'hello')
drop procedure hello
Une fois la procédure supprimée, vous pouvez supprimer l’assembly contenant votre exemple de code.
IF EXISTS (SELECT name FROM sys.assemblies WHERE name = 'helloworld')
drop assembly helloworld
Voir aussi
Procédures stockées CLR
SQL Server In-Process extensions spécifiques à ADO.NET
Débogage d’objets de base de données CLR
Sécurité de l’intégration du CLR