Partager via


Débogage d'objets de base de données CLR

SQL Server prend en charge le débogage d'objets Transact-SQL et CLR dans la base de données. Les principaux atouts du débogage dans SQL Server sont la facilité d'installation et d'utilisation, et l'intégration du débogueur SQL Server avec le débogueur Microsoft Visual Studio. En outre, le débogage fonctionne sur plusieurs langages. Les utilisateurs peuvent effectuer de façon transparente un pas à pas détaillé dans les objets CLR à partir de Transact-SQL et vice versa. Le débogueur Transact-SQL de SQL Server 2008 dans SQL Server Management Studio ne peut pas être utilisé pour déboguer des objets de base de données managés, mais vous pouvez déboguer les objets en utilisant les débogueurs de Visual Studio 2005 Professional et Visual Studio 2005 Team Suite. Le débogage d'objets de base de données managés dans Visual Studio prend en charge toutes les fonctionnalités de débogage classiques, par exemple, les instructions "step into" et "step over" dans les routines qui s'exécutent sur le serveur. Les débogueurs peuvent définir des points d'arrêt, inspecter la pile des appels, inspecter les variables et modifier des valeurs de variables en cours de débogage. Notez que Visual Studio .NET 2003 ne peut pas être utilisé pour le débogage ou la programmation de l'intégration du CLR. SQL Server inclut le .NET Framework préinstallé et Visual Studio .NET 2003 ne peut pas utiliser les assemblys .NET Framework 2.0.

Pour plus d'informations sur le débogage de code managé à l'aide de Visual Studio, consultez la rubrique « Débogage du code managé » dans la documentation de Visual Studio.

Autorisations et restrictions de débogage

Le débogage est une opération nécessitant des privilèges élevés et, par conséquent, seuls les membres du rôle serveur fixe sysadmin sont autorisés à l'effectuer dans SQL Server.

Les restrictions suivantes s'appliquent dans le cadre du débogage :

  • Le débogage des routines CLR est restreint à une instance de débogueur à la fois. Cette limitation s'applique parce que l'exécution de la totalité du code CLR est gelée lorsqu'un point d'arrêt est atteint et qu'elle ne reprend que lorsque le débogueur continue à partir du point d'arrêt. Toutefois, vous pouvez continuer à déboguer Transact-SQL dans d'autres connexions. Bien que le débogage Transact-SQL ne gèle pas d'autres exécutions sur le serveur, il peut provoquer la mise en attente d'autres connexions par le maintien d'un verrou.

  • Les connexions existantes ne peuvent pas être déboguées ; seules les nouvelles connexions peuvent l'être, puisque SQL Server requiert des informations sur l'environnement du client et du débogueur pour que la connexion puisse être établie.

En raison des restrictions précitées, nous recommandons que le débogage du code Transact-SQL et CLR soit effectué sur un serveur de test et non sur un serveur de production.

Vue d'ensemble du débogage des objets de base de données managés

Le débogage dans SQL Server suit un modèle « par connexion ». Un débogueur peut détecter et déboguer des activités uniquement sur la connexion cliente à laquelle il est attaché. Comme les fonctionnalités du débogueur ne sont pas limitées par le type de connexion, il est possible de déboguer à la fois des TDS (Tabular Data Stream) et des connexions HTTP. Toutefois, SQL Server n'autorise pas le débogage des connexions existantes. Le débogage prend en charge toutes les fonctionnalités de débogage communes dans les routines qui s'exécutent sur le serveur. L'interaction entre un débogueur et SQL Server s'effectue par le biais d'un modèle COM (Component Object Model) distribué.

Pour plus d'informations et pour des scénarios de débogage des procédures stockées managées, fonctions, déclencheurs, types définis par l'utilisateur et agrégats, consultez la rubrique « Débogage d'une base de données SQL CLR » dans la documentation de Visual Studio.

[!REMARQUE]

Le protocole réseau TCP/IP doit être activé sur l'instance de SQL Server afin d'utiliser Visual Studio pour le développement et le débogage distants. Pour plus d'informations sur l'activation du protocole TCP/IP sur le serveur, consultez Configuration des protocoles réseau client.

Pour déboguer un objet de base de données managé

  1. Ouvrez Microsoft Visual Studio 2005, créez un projet SQL Server et établissez une connexion à une base de données sur une instance de SQL Server.

  2. Créez un type. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet, sélectionnez Ajouter, puis Nouvel élément. Dans la fenêtre Ajouter un nouvel élément, sélectionnez Procédure stockée, Fonction définie par l'utilisateur, Type défini par l'utilisateur, Déclencheur, Agrégat ou Classe. Spécifiez un nom pour le fichier source du nouveau type et cliquez sur Ajouter.

  3. Ajoutez le code du nouveau type à l'éditeur de texte. Pour obtenir le code d'un exemple de procédure stockée, consultez la section correspondante plus loin dans cette rubrique.

  4. Ajoutez un script qui teste le type. Dans l'Explorateur de solutions, développez le répertoire TestScripts et double-cliquez sur Test.sql pour ouvrir le fichier source du script de test par défaut. Ajoutez à l'éditeur de texte un script de test qui appelle le code à déboguer. Un exemple de script est proposé ci-dessous.

  5. Placez un ou plusieurs points d'arrêt dans le code source. Cliquez avec le bouton droit sur une ligne de code dans l'éditeur de texte, dans la fonction ou la routine que vous souhaitez déboguer et sélectionnez Point d'arrêt et Insérer un point d'arrêt. Le point d'arrêt est ajouté et la ligne de code est affichée en rouge.

  6. Cliquez sur Démarrer le débogage dans le menu Déboguer pour compiler, déployer et tester le projet. Le script de test dans Test.sql est exécuté et l'objet de base de données managé est appelé.

  7. Lorsque la flèche jaune qui désigne le pointeur d'instruction apparaît au niveau du point d'arrêt, l'exécution du code est suspendue et vous pouvez commencer à déboguer votre objet de base de données managé. Dans le menu Déboguer, cliquez sur Pas à pas principal pour faire passer le pointeur d'instruction à la ligne de code suivante. La fenêtre Variables locales permet d'observer l'état des objets mis en surbrillance par le pointeur d'instruction. Des variables peuvent être ajoutées à la fenêtre Espion. L'état des variables espionnées peut être consulté tout au long de la session de débogage, et non uniquement lorsque la variable figure dans la ligne de code mise en surbrillance par le pointeur d'instruction. Sélectionnez Continuer dans le menu Déboguer pour faire avancer le pointeur d'instruction jusqu'au point d'arrêt suivant ou pour terminer l'exécution de la routine s'il n'y a plus de points d'arrêt.

Exemple

L'exemple suivant retourne la version de SQL Server à l'appelant.

C#

using System;
using System.Data;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server; 

public class StoredProcedures 
{
   [Microsoft.SqlServer.Server.SqlProcedure]
   public static void GetVersion()
   {
   using(SqlConnection connection = new SqlConnection("context connection=true")) 
   {
      connection.Open();
      SqlCommand command = new SqlCommand("select @@version",
                                           connection);
      SqlContext.Pipe.ExecuteAndSend(command);
      }
   }
}

Visual Basic

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

Partial Public Class StoredProcedures 
    <Microsoft.SqlServer.Server.SqlProcedure> _
    Public Shared Sub GetVersion()
        Using connection As New SqlConnection("context connection=true")
            connection.Open()
            Dim command As New SqlCommand("SELECT @@VERSION", connection)
            SqlContext.Pipe.ExecuteAndSend(command)
        End Using
    End Sub
End Class

Le code suivant est un script de test qui appelle la procédure stockée GetVersion définie précédemment.

EXEC GetVersion