sqlclr

10
SQL Server 2005 : procédures stockées en .Net Par Ronald VASSEUR Date de publication : 11 juillet 2005

description

sql clr

Transcript of sqlclr

  • SQL Server 2005 : procdures stockes en .Net

    Par Ronald VASSEUR

    Date de publication : 11 juillet 2005

    http://www.developpez.comhttp://www.developpez.net/forums/u29514/webman/http://webman.developpez.com/

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

    - 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. Aucunereproduction, 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.http://webman.developpez.com/articles/sqlserver/sqlclr/

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

    http://www.developpez.comhttp://www.developpez.net/forums/u29514/webman/http://webman.developpez.com/articles/sqlserver/sqlclr/

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

    - 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. Aucunereproduction, 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.http://webman.developpez.com/articles/sqlserver/sqlclr/

    Introduction

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

    Pr requis logiciels

    1 Visual Studio 2005 Beta 2 ou suprieur2 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 consquencedirecte de pouvoir excuter du code .Net l'intrieur mme du processus de SQL Server. Il est bien entendu toujourspossible d'utiliser Transact-SQL (T-SQL pour les intimes), mais aussi, et c'est nouveau, VB.Net, C# ou tout autrelangage .Net. Clairement, cela signifie que vous allez pouvoir dvelopper des procdures stockes, des triggers, desfonctions 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 environnementd'excution scuris et robuste qui supporte du code crit dans plusieurs langagesdiffrents (C++, VB, C#, Pascal, Cobol ...) et simplifie le dveloppement, la gestion et ledploiement d'applications. On peut la comparer la Java Virtual Machine (JVM) ou auRuntime Visual Basic 6 (msvbvm60.dll).La CLR est constitue d'un ensemble de services standards (Modle de programmationoriente 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 auxdveloppeurs .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, maisnous verrons dans cet article que Visual Studio 2005 vous simplifie cette opration tel point que cela devient unvritable 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 cecode est mal scuris ou souffre de bugs il n'est donc pas question (pour les dveloppeurs mais surtout pour lesDBA) de laisser libre accs tout et n'importe quoi aux assemblies, pour cela trois niveaux de scurit ont t prvus.

    1 Safe2 External-Access3 Unsafe

    Le mode d'excution le plus sr tant Safe, il est trs vivement recommand de l'employer systmatiquement, il s'agtd'ailleurs le mode par dfaut. En mode Safe, l'assembly n'aura accs rien en dehors du contexte d'xcution de SQLServer, 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 SQLmme, 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 cesressources, il ne s'agt donc pas de crer une brche bante dans votre serveur ! Enfin, le mode Unsafe est le niveaude 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 !

    http://www.developpez.comhttp://www.developpez.net/forums/u29514/webman/http://webman.developpez.com/articles/sqlserver/sqlclr/http://www.developpez.net/forums/u5764/leduke/http://dotnet.developpez.com/FAQ.NET/

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

    - 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. Aucunereproduction, 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.http://webman.developpez.com/articles/sqlserver/sqlclr/

    Comme nous venons de le voir l'intgration de la CLR offre de nombreuses possibilits aux dveloppeurs .Net, ils'agt d'une relle alternative l'utilisation de T-SQL. Cela va mme, dans une certaine mesure, modifier votre faonde concevoir des applications puisqu'il sera possible d'intgrer facilement une partie de la logique de vos applicationsdirectement dans le serveur de base de donnes. Vous avez potentiellement accs la puissance et la richesse duFramework .Net 2.0 l'intrieur mme de SQL Server. Nous pouvons donc raisonnablement penser que l'intgrationde la CLR 2.0 dans SQL Server est une innovation majeure. Voyons maintenant comment tirer profit de cela dansVisual 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'unsimple projet de base de donnes comme dans la version prcdente de VS .Net, mais bel et bien de raliser diverslments pour SQL Server comme par exemple des procdures stockes, des triggers, des fonctions d'agrgats oumme des types de donnes. Comme nous l'avons vu prcdemment, l'intgration de la CLR dans SQL Server aouvert 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 commentcrer et paramtrer un SQL Server Project pour arriver nos fins.

    Remarque : avant toute chose, vous devez avoir une base de donnes existante dansSQL 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 rfrencetout 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 SQLServer 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 unedeuxime fentre s'affiche, il s'agt ici de fournir les informations de connexion relatives au serveur sur lequel l'onsouhaitera 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), etenfin de slectionner la base de donnes utiliser. A cet instant cette fentre doit correspondre cela :

    http://www.developpez.comhttp://www.developpez.net/forums/u29514/webman/http://webman.developpez.com/articles/sqlserver/sqlclr/

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

    - 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. Aucunereproduction, 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.http://webman.developpez.com/articles/sqlserver/sqlclr/

    Base de donnes utiliser

    Vous pouvez dsormais cliquer sur OK, cet instant, Visual Studio vous demande si vous dsirez activer le dbogageSQL/CLR sur cette connexion, cliquez sur Oui. Voil, si tout s'est bien droul Visual Studio doit tre en train de crervotre projet en fonction de toutes les informations que vous avez fournies. Comme pour n'importe quel autre type deprojet, 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 uneprocdure stocke, pour cela cliquez avec le bouton droit de votre souris sur votre projet dans l'explorateur de solution

    http://www.developpez.comhttp://www.developpez.net/forums/u29514/webman/http://webman.developpez.com/articles/sqlserver/sqlclr/

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

    - 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. Aucunereproduction, 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.http://webman.developpez.com/articles/sqlserver/sqlclr/

    et slectionnez add new item, vous l'aurez devin, choisissez Stored Procedure dans la liste Vous avez danscette liste un aperu des lments que vous pouvez intgrer dans un SQL Server Project. Nommez cette procduremaPremiereProcedure.

    Vous pouvez voir qu'en choisissant une procdure stocke Visual Studio vous fournit un squelette pour celle-ci, avecnotamment les Imports et les diverses dclarations ncessaires ! Voici, ci-dessous, une copie du code qui vous estdonn :

    Squelette du code gnr par Visual Studio 2005Imports SystemImports System.DataImports System.Data.SqlImports System.Data.SqlTypesImports Microsoft.SqlServer.Server

    Partial Public Class StoredProcedures _ 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 accueillirvotre code.

    III - Ecrire une procdure stocke en .Net

    Nous allons crer une procdure stocke basique, elle retournera simplement le nombre d'enregistrements d'unetable 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 Usingqui sont une nouveaut de VB.Net 2.0, cela permet d'appeler automatiquement lamthode Dispose() pour les objets correspondants, pour que cela soit possible ils doiventimplmenter l'interface IDisposable, la fin du bloc, les ressources utilises par les objetsdans ce mme bloc sont libres.

    Pour coder notre procdure stocke, Visual Studio 2005 a dj ralis les imports ncessaires et placMicrosoft.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 SQLServer 2005); ensuite, il faut ouvrir la connexion, puis instancier un objet SqlCommand en lui passant au constructeurla 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, vase charger de librer les ressources ncessaires, cette nouveaut en VB.Net est trs apprciable !

    http://www.developpez.comhttp://www.developpez.net/forums/u29514/webman/http://webman.developpez.com/articles/sqlserver/sqlclr/

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

    - 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. Aucunereproduction, 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.http://webman.developpez.com/articles/sqlserver/sqlclr/

    Code comment de la procdure stockeImports SystemImports System.DataImports System.Data.SqlImports System.Data.SqlClientImports System.Data.SqlTypesImports Microsoft.SqlServer.Server

    Partial Public Class StoredProcedures

    ' Attribut qui spcifie qu'il s'agt d'une procdure stocke _ 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 desraisons de scurit et de gestion des diffrentes versions que vous pourrez crer. Poursigner son assembly, Visual Studio 2005 intgre une nouveaut, il suffit d'aller dansl'explorateur de solution, de cliquer sur son projet avec le bouton droit de la souris etde choisir Properties. Il faut ensuite aller dans l'onglet Signing, puis cocher Sign theassembly, slectionnez New dans la liste droulante, une fentre identique l'imageci-dessous s'ouvre, et vous invite saisir un nom de fichier (fichier qui contiendra desinformations 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 signaturequi sera cre.

    http://www.developpez.comhttp://www.developpez.net/forums/u29514/webman/http://webman.developpez.com/articles/sqlserver/sqlclr/

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

    - 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. Aucunereproduction, 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.http://webman.developpez.com/articles/sqlserver/sqlclr/

    Signature de l'assembly

    Aprs avoir vu comment coder notre procdure stocke, nous allons maintenant voir comment la dployer directementsur 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 nepose pas de problme, vous n'avez alors plus qu'a cliquer sur votre projet avec le bouton droit de la souris dansl'explorateur de solution et choisir "Deploy". Ds lors, la fentre que vous pouvez voir ci-dessous s'ouvre et vousdemande si ncessaire un login et un mot de passe ayant les autorisations ncessaires pour dployer cette procdurestocke dans SQL Server 2005.

    http://www.developpez.comhttp://www.developpez.net/forums/u29514/webman/http://webman.developpez.com/articles/sqlserver/sqlclr/

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

    - 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. Aucunereproduction, 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.http://webman.developpez.com/articles/sqlserver/sqlclr/

    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 commandeT-SQL dans SQL Express Manager, voici cette commande :

    Commande d'activation de la CLR dans SQL Server 2005EXEC sp_configure @configname = 'clr enabled', @configvalue = 1RECONFIGURE WITH OVERRIDEGO

    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 intgredans SQL Server 2005. Vous pouvez bien entendu vrifier sa prsence et son fonctionnement par vous-mme dans leSQL 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 .Netmais aussi depuis n'importe quel script T-SQL ayant les permissions requises, votre dveloppement est un devenuun 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 stockeUSE 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 deraliser et de tester votre premire procdure stocke en .Net.

    http://www.developpez.comhttp://www.developpez.net/forums/u29514/webman/http://webman.developpez.com/articles/sqlserver/sqlclr/

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

    - 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. Aucunereproduction, 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.http://webman.developpez.com/articles/sqlserver/sqlclr/

    Conclusion

    Au travers de cet article, nous avons pu entrevoir les possibilits offertes par l'intgration de la CLR dans SQL Server2005. L'imbrication avec Visual Studio vous permet d'tre trs productif, on peut citer en exemple le systme dedploiement de vos assembly que l'on a vu un peu plus haut. Au del des procdures stockes en .Net, la CLR 2.0va 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 ThomasLebrun que vous pouvez trouver ici.Un grand merci Freegreg pour la relecture de cet article.

    http://www.developpez.comhttp://www.developpez.net/forums/u29514/webman/http://webman.developpez.com/articles/sqlserver/sqlclr/http://morpheus.developpez.com/SQL-Server-2005/http://www.developpez.net/forums/u6056/freegreg/

    SynopsisSommaireIntroductionPr requis logicielsI - Intgration de la CLR dans SQL Server 2005II - SQL Server Project et Visual Studio 2005III - Ecrire une procdure stocke en .NetIV - Publier une procdure stocke dans SQL Server avec Visual StudioConclusion