Vous êtes sur la page 1sur 10

SQL Server 2005 : procdures stockes en .

Net
Par Ronald VASSEUR

Date de publication : 11 juillet 2005

SQL Server 2005 : procdures stockes en .Net par Ronald VASSEUR

Introduction...................................................................................................................................................................3
Pr requis logiciels.......................................................................................................................................................3
I - Intgration de la CLR dans SQL Server 2005....................................................................................................... 3
II - SQL Server Project et Visual Studio 2005............................................................................................................ 4
III - Ecrire une procdure stocke en .Net.................................................................................................................. 6
IV - Publier une procdure stocke dans SQL Server avec Visual Studio................................................................. 8
Conclusion..................................................................................................................................................................10

-2-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2013 Ronald VASSEUR. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

SQL Server 2005 : procdures stockes en .Net par Ronald VASSEUR

Introduction
Au cours de cet article, nous allons voir les apports d'une innovation majeure de SQL Server 2005, savoir l'intgration
de la CLR 2.0. Nous verrons comment crer et dployer du code .Net directement l'intrieur du serveur de base de
donnes, pour tayer mes propos, je prendrais pour exemple la cration et le dploiement d'une procdure stocke
en VB.Net dans SQL Server 2005.

Pr requis logiciels
1
2

Visual Studio 2005 Beta 2 ou suprieur


SQL Server 2005 Beta 2 ou suprieur

I - Intgration de la CLR dans SQL Server 2005


Une des innovations majeures de SQL Server dans sa version 2005 est sans conteste l'intgration de la CLR 2.0,
l'instar de Windows, votre serveur de base de donnes prfr intgre sa propre CLR. Cela a pour consquence
directe de pouvoir excuter du code .Net l'intrieur mme du processus de SQL Server. Il est bien entendu toujours
possible d'utiliser Transact-SQL (T-SQL pour les intimes), mais aussi, et c'est nouveau, VB.Net, C# ou tout autre
langage .Net. Clairement, cela signifie que vous allez pouvoir dvelopper des procdures stockes, des triggers, des
fonctions ou mme des nouveaux types de donnes pour vos bases, dans votre langage .Net favori.
Dfinition de la CLR : La Common Language Runtime (CLR) est un environnement
d'excution scuris et robuste qui supporte du code crit dans plusieurs langages
diffrents (C++, VB, C#, Pascal, Cobol ...) et simplifie le dveloppement, la gestion et le
dploiement d'applications. On peut la comparer la Java Virtual Machine (JVM) ou au
Runtime Visual Basic 6 (msvbvm60.dll).
La CLR est constitue d'un ensemble de services standards (Modle de programmation
oriente objet, scurit, ramasse miettes) dont chaque programme .NET peut tirer profit.
Dfinition de Leduke issue de la FAQ .Net de Developpez.com
On voit donc que l'intgration de la CLR 2.0 dans SQL Server 2005 ouvre de grandes perspectives aux
dveloppeurs .Net puisqu'ils pourront dployer leur ralisation directement dans le serveur de bases de donnes.
Le processus de dploiement d'une assembly l'intrieur de SQL Server n'est, en soit, pas trs complexe, mais
nous verrons dans cet article que Visual Studio 2005 vous simplifie cette opration tel point que cela devient un
vritable jeu d'enfant.
Il est bien vident qu'excuter du code .Net l'intrieur de SQL Server peut tre en soit une source d'inscurit si ce
code est mal scuris ou souffre de bugs il n'est donc pas question (pour les dveloppeurs mais surtout pour les
DBA) de laisser libre accs tout et n'importe quoi aux assemblies, pour cela trois niveaux de scurit ont t prvus.
1
2
3

Safe
External-Access
Unsafe

Le mode d'excution le plus sr tant Safe, il est trs vivement recommand de l'employer systmatiquement, il s'agt
d'ailleurs le mode par dfaut. En mode Safe, l'assembly n'aura accs rien en dehors du contexte d'xcution de SQL
Server, elle n'aura, par exemple, pas accs au systme de fichier, son univers se limitera SQL Server seulement.
External-Access est le mode de scurit et de permissions intermdiaires, ici l'assembly, en plus du serveur SQL
mme, va avoir accs des ressources externes comme le registre, le rseau et le systme de fichiers du serveur.
Comme tout autre assembly .Net, il est bien entendu ncessaire de possder les autorisations adquates ces
ressources, il ne s'agt donc pas de crer une brche bante dans votre serveur ! Enfin, le mode Unsafe est le niveau
de scurisation le moins lev, ici l'assembly a potentiellement (toujours selon les autorisations accordes) accs
tous les types de ressources imaginables, pour des raisons videntes de scurit, il est dconseill d'utiliser ce mode !
-3-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2013 Ronald VASSEUR. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

SQL Server 2005 : procdures stockes en .Net par Ronald VASSEUR

Comme nous venons de le voir l'intgration de la CLR offre de nombreuses possibilits aux dveloppeurs .Net, il
s'agt d'une relle alternative l'utilisation de T-SQL. Cela va mme, dans une certaine mesure, modifier votre faon
de concevoir des applications puisqu'il sera possible d'intgrer facilement une partie de la logique de vos applications
directement dans le serveur de base de donnes. Vous avez potentiellement accs la puissance et la richesse du
Framework .Net 2.0 l'intrieur mme de SQL Server. Nous pouvons donc raisonnablement penser que l'intgration
de la CLR 2.0 dans SQL Server est une innovation majeure. Voyons maintenant comment tirer profit de cela dans
Visual Studio au travers de la cration d'une procdure stocke en code manag

II - SQL Server Project et Visual Studio 2005


Visual Studio propose, dans sa version 2005, un nouveau type de projet : le SQL Server Project, il ne s'agt pas d'un
simple projet de base de donnes comme dans la version prcdente de VS .Net, mais bel et bien de raliser divers
lments pour SQL Server comme par exemple des procdures stockes, des triggers, des fonctions d'agrgats ou
mme des types de donnes. Comme nous l'avons vu prcdemment, l'intgration de la CLR dans SQL Server a
ouvert de nouveaux horizons aux dveloppeurs, Visual Studio vous donne ici les moyens de les atteindre facilement.
Le but de cet article tant de vous montrer comment crer une procdure stocke en .Net, nous allons voir ici comment
crer et paramtrer un SQL Server Project pour arriver nos fins.
Remarque : avant toute chose, vous devez avoir une base de donnes existante dans
SQL Server, c'est dans cette mme base que sera dploye notre procdure stocke,
pour les besoins de l'article, j'ai cre une base nomme Developpez, j'y ferai rfrence
tout au long de mes explications.
Passons aux choses concrtes :
Dans Visual Studio cliquez sur File puis New Project, dans Visual Basic allez dans Database et slectionnez SQL
Server Project. Une fois arriv l, vous devez voir une fentre identique celle-ci :

Cration d'un nouveau projet SQL Server


Nommez alors votre projet dans la zone approprie, ici ce sera sqlServerDeveloppez, cliquez sur OK. Ds lors une
deuxime fentre s'affiche, il s'agt ici de fournir les informations de connexion relatives au serveur sur lequel l'on
souhaitera dployer notre projet. Cela consiste donc fournir le nom du serveur (et ventuellement de l'instance),
les paramtres d'authentification (intgre ou un couple login et password ayant les autorisations ncessaires), et
enfin de slectionner la base de donnes utiliser. A cet instant cette fentre doit correspondre cela :

-4-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2013 Ronald VASSEUR. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

SQL Server 2005 : procdures stockes en .Net par Ronald VASSEUR

Base de donnes utiliser


Vous pouvez dsormais cliquer sur OK, cet instant, Visual Studio vous demande si vous dsirez activer le dbogage
SQL/CLR sur cette connexion, cliquez sur Oui. Voil, si tout s'est bien droul Visual Studio doit tre en train de crer
votre projet en fonction de toutes les informations que vous avez fournies. Comme pour n'importe quel autre type de
projet, vous pouvez consulter dans l'explorateur de solution la structure de ce projet.

Dbogage SQL/CLR
Jusqu'ici vous n'avez cr qu'un projet "gnrique", il faut maintenant spcifier que vous voulez dvelopper une
procdure stocke, pour cela cliquez avec le bouton droit de votre souris sur votre projet dans l'explorateur de solution
-5-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2013 Ronald VASSEUR. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

SQL Server 2005 : procdures stockes en .Net par Ronald VASSEUR

et slectionnez add new item, vous l'aurez devin, choisissez Stored Procedure dans la liste Vous avez dans
cette liste un aperu des lments que vous pouvez intgrer dans un SQL Server Project. Nommez cette procdure
maPremiereProcedure.
Vous pouvez voir qu'en choisissant une procdure stocke Visual Studio vous fournit un squelette pour celle-ci, avec
notamment les Imports et les diverses dclarations ncessaires ! Voici, ci-dessous, une copie du code qui vous est
donn :
Squelette du code gnr par Visual Studio 2005
Imports
Imports
Imports
Imports
Imports

System
System.Data
System.Data.Sql
System.Data.SqlTypes
Microsoft.SqlServer.Server

Partial Public Class StoredProcedures


<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub maPremiereProcedure ()
' Add your code here
End Sub
End Class

Au travers de ce code, vous voyez qu'il ne diffre pas normment d'une classe "normale". Tout est prt pour accueillir
votre code.

III - Ecrire une procdure stocke en .Net


Nous allons crer une procdure stocke basique, elle retournera simplement le nombre d'enregistrements d'une
table dont le nom sera pass en paramtre. Nous allons donc faire une requte T-SQL utilisant la fonction count().
Pour cela, il nous faut rajouter un imports de namespace pour raliser la connexion, il s'agt de System.Data.SqlClient.
Remarque : Dans ce code vous pouvez voir que l'on utilise Using et End Using
qui sont une nouveaut de VB.Net 2.0, cela permet d'appeler automatiquement la
mthode Dispose() pour les objets correspondants, pour que cela soit possible ils doivent
implmenter l'interface IDisposable, la fin du bloc, les ressources utilises par les objets
dans ce mme bloc sont libres.
Pour coder notre procdure stocke, Visual Studio 2005 a dj ralis les imports ncessaires et plac
Microsoft.SqlServer.Server.SqlProcedure() pour signaler au compilateur qu'il s'agt d'une procdure stocke. Ensuite,
pour calculer combien il y a d'enregistrements dans une table il n'y a rien de particulier faire, voici les tapes
raliser :
Il faut, tout d'abord, instancier un objet SqlConnection avec en paramtre du constructeur le contexte de connexion
(en effet, nul besoin d'une "connection string" puisque notre code s'xecutera au sein mme du processus de SQL
Server 2005); ensuite, il faut ouvrir la connexion, puis instancier un objet SqlCommand en lui passant au constructeur
la requte T-SQL et la connexion utiliser.
Vient alors le moment d'utiliser la nouvelle mthode ExecuteEndSend() de la classe SqlPipe, cette mthode permet,
comme son nom l'indique, d'excuter notre commande T-SQL et d'en renvoyer les rsultats "l'auteur" de la requte,
on lui passe en paramtre notre objet SqlCommand.
Puis, pour finir, puisque nous avons ouvert notre connexion, nous allons simplement la refermer. Le End Using, va
se charger de librer les ressources ncessaires, cette nouveaut en VB.Net est trs apprciable !

-6-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2013 Ronald VASSEUR. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

SQL Server 2005 : procdures stockes en .Net par Ronald VASSEUR

Code comment de la procdure stocke


Imports
Imports
Imports
Imports
Imports
Imports

System
System.Data
System.Data.Sql
System.Data.SqlClient
System.Data.SqlTypes
Microsoft.SqlServer.Server

Partial Public Class StoredProcedures


' Attribut qui spcifie qu'il s'agt d'une procdure stocke
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub maPremiereProcedure(ByVal maTable As String)
' Instanciation d'un objet SqlConnection
Using maConnexion As New SqlConnection("context connection = true")
' Instanciation de notre requte dans un objet SqlCommand
Dim maCommande As SqlCommand = New SqlCommand("SELECT count(*)FROM dbo." & maTable,
maConnexion)
' Ouverture de la connexion
maConnexion.Open()
' Execution de la commande et renvoi du rsultat
SqlContext.Pipe.ExecuteAndSend(maCommande)
' Fermeture de la connexion
maConnexion.Close()
' Fin du "Using", les ressources l'intrieur du bloc "Using" vont tre libres
End Using
End Sub
End Class

Remarque : Microsoft recommande de signer numriquement ses assemblies, pour des


raisons de scurit et de gestion des diffrentes versions que vous pourrez crer. Pour
signer son assembly, Visual Studio 2005 intgre une nouveaut, il suffit d'aller dans
l'explorateur de solution, de cliquer sur son projet avec le bouton droit de la souris et
de choisir Properties. Il faut ensuite aller dans l'onglet Signing, puis cocher Sign the
assembly, slectionnez New dans la liste droulante, une fentre identique l'image
ci-dessous s'ouvre, et vous invite saisir un nom de fichier (fichier qui contiendra des
informations pour signer l'assembly), cliquez sur OK, et voil, votre assembly est signe.
Vous pouvez ventuellement saisir un mot de passe pour scuriser le fichier de signature
qui sera cre.

-7-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2013 Ronald VASSEUR. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

SQL Server 2005 : procdures stockes en .Net par Ronald VASSEUR

Signature de l'assembly
Aprs avoir vu comment coder notre procdure stocke, nous allons maintenant voir comment la dployer directement
sur notre serveur SQL Server 2005.

IV - Publier une procdure stocke dans SQL Server avec Visual Studio
Publier une procdure stocke dans SQL Server 2005, depuis Visual Studio, est un vritable jeu d'enfant. En effet,
regardez bien, cela va allez trs vite :
Compilez votre projet en cliquant sur Build puis "Build le_nom_de_votre_projet", si tout va bien la compilation ne
pose pas de problme, vous n'avez alors plus qu'a cliquer sur votre projet avec le bouton droit de la souris dans
l'explorateur de solution et choisir "Deploy". Ds lors, la fentre que vous pouvez voir ci-dessous s'ouvre et vous
demande si ncessaire un login et un mot de passe ayant les autorisations ncessaires pour dployer cette procdure
stocke dans SQL Server 2005.

-8-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2013 Ronald VASSEUR. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

SQL Server 2005 : procdures stockes en .Net par Ronald VASSEUR

Dploiement de la procdure stocke


Remarque : Si c'est la premire fois que vous utilisez la CLR intgre dans SQL Server,
elle doit surement tre dsactive, pour l'activer, il suffit juste d'excuter une commande
T-SQL dans SQL Express Manager, voici cette commande :
Commande d'activation de la CLR dans SQL Server 2005

EXEC sp_configure @configname = 'clr enabled', @configvalue = 1


RECONFIGURE WITH OVERRIDE
GO

Si le dploiement s'est bien droul, dans la fentre output de Visual Studio vous devez voir s'afficher :
========== Deploy: 1 succeeded, 0 failed, 0 skipped ==========

Cela signifie que votre assembly .Net, et donc votre procdure stocke, se trouve dsormais directement intgre
dans SQL Server 2005. Vous pouvez bien entendu vrifier sa prsence et son fonctionnement par vous-mme dans le
SQL Express Manager. Pour cela, allez dans l'explorateur jusqu'au nud de la base de donnes que vous avez utilis,
puis dans le dossier programability; allez voir dans Stored Procedure et vous trouverez votre ou vos procdure(s)
stocke(s). Votre procdure stocke est bien videmment utilisable depuis du code manag dans une application .Net
mais aussi depuis n'importe quel script T-SQL ayant les permissions requises, votre dveloppement est un devenu
un lment part entire de SQL Server, il s'excute l'intrieur de celui-ci de part l'intgration de la CLR.
Voici comment excuter votre procdure stocke dans SQL Express Manager : dans la fentre "Query Editor"
saisissez le script suivant et lancer son excution :
Commande d'excution de la procdure stocke
USE Developpez

EXEC maPremiereProcedure "nom_d'une_table"


GO

Le rsultat (le nombre d'enregistrements dans la table passe en paramtre) vous est retourn; voil, vous venez de
raliser et de tester votre premire procdure stocke en .Net.

-9-

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2013 Ronald VASSEUR. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.

SQL Server 2005 : procdures stockes en .Net par Ronald VASSEUR

Conclusion
Au travers de cet article, nous avons pu entrevoir les possibilits offertes par l'intgration de la CLR dans SQL Server
2005. L'imbrication avec Visual Studio vous permet d'tre trs productif, on peut citer en exemple le systme de
dploiement de vos assembly que l'on a vu un peu plus haut. Au del des procdures stockes en .Net, la CLR 2.0
va vous permettre d'tendre les capacits et la personnalisation de SQL Server 2005, pour voir cela plus en dtail,
je vous donne rendez-vous dans de prochains articles.
Si vous souhaitez avoir plus d'informations sur SQL Server 2005 je vous recommande l'excellent article de Thomas
Lebrun que vous pouvez trouver ici.
Un grand merci Freegreg pour la relecture de cet article.

- 10 -

Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de
prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2005-2013 Ronald VASSEUR. Aucune
reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans
l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.