Share via


Comment déboguer des objets de base de données CLR

S’applique à :SQL Server

SQL Server prend en charge le débogage d’objets Transact-SQL et CLR (Common Language Runtime) dans la base de données. Les principaux aspects du débogage dans SQL Server sont la facilité d’installation et d’utilisation, ainsi que l’intégration du débogueur SQL Server au débogueur Microsoft Visual Studio. En outre, le débogage fonctionne sur plusieurs langages. Les utilisateurs peuvent passer en toute transparence aux objets CLR à partir de Transact-SQL, et inversement. Le débogueur Transact-SQL 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. 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.

Note

Visual Studio .NET 2003 ne peut pas être utilisé pour la programmation ou le débogage de l’intégration CLR. SQL Server inclut le .NET Framework préinstallé et Visual Studio .NET 2003 ne peut pas utiliser les assemblys .NET Framework 2.0.

Autorisations et restrictions de débogage

Le débogage est une opération hautement privilégiée. Par conséquent, seuls les membres du rôle serveur fixe sysadmin sont autorisés à le faire 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 bloque pas d’autres exécutions sur le serveur, il peut entraîner l’attente d’autres connexions en maintenant un verrou.

  • Les connexions existantes ne peuvent pas être déboguées, seules les nouvelles connexions, car SQL Server nécessite des informations sur le client et l’environnement du débogueur avant que la connexion ne puisse être établie.

En raison des restrictions ci-dessus, nous vous recommandons de déboguer le code Transact-SQL et CLR sur un serveur de test, et non sur un serveur de production.

Vue d’ensemble

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 se produit via le modèle objet de composant distribué (COM).

Pour plus d’informations et de scénarios sur le débogage de procédures stockées gérées, de fonctions, de déclencheurs, de types définis par l’utilisateur et d’agrégats, consultez la documentation relative au débogage de base de données d’intégration CLR SQL Server dans la documentation visual Studio.

Le protocole réseau TCP/IP doit être activé sur l’instance SQL Server afin d’utiliser Visual Studio pour le développement à distance, le débogage et le développement. Pour plus d’informations sur l’activation du protocole TCP/IP sur le serveur, consultez Configurer les protocoles clients.

Étapes de débogage

Procédez comme suit pour déboguer un objet de base de données CLR dans Microsoft Visual Studio :

  1. Ouvrez Microsoft Visual Studio et créez un projet SQL Server. Vous pouvez utiliser l’instance SQL LocalDB fournie avec Visual Studio.

  2. Créez un nouveau type SQL CLR (C#) :

    1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet, puis sélectionnez Ajouter, Nouvel élément....
    2. Dans la fenêtre Ajouter un nouvel élément , sélectionnez procédure stockée SQL CLR C#, fonction définie par l’utilisateur SQL CLR C#, type défini par l’utilisateur SQL CLR C#, déclencheur SQL CLR C#, agrégat SQL CLR C# ou classe.
    3. Spécifiez un nom pour le fichier source du nouveau type, puis sélectionnez Ajouter.
  3. Ajoutez le code du nouveau type à l'éditeur de texte. Pour obtenir un exemple de code pour un exemple de procédure stockée, consultez la section Exemple suivant dans cet article.

  4. Ajoutez un script qui teste le type :

    1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nœud du projet, puis sélectionnez Ajouter, Script....
    2. Dans la fenêtre Ajouter un nouvel élément , sélectionnez Script (Non dans la build) et spécifiez un nom, tel que Test.sql. Cliquez sur le bouton Ajouter.
    3. Dans l’Explorateur de solutions, double-cliquez sur le Test.sql nœud pour ouvrir le fichier source de script de test par défaut.
    4. Ajoutez le script de test (un qui appelle le code à déboguer) à l’éditeur de texte. Consultez l’exemple dans la section suivante pour obtenir un exemple de script.
  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 sur la fonction ou la routine que vous souhaitez déboguer. Sélectionnez Point d’arrêt, 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. Dans le menu Débogage , sélectionnez Démarrer le débogage pour compiler, déployer et tester le projet. Le script de test dans lequel il Test.sql est exécuté et l’objet de base de données managée est appelé.

  7. Lorsque la flèche jaune (désignant le pointeur d’instruction) apparaît au point d’arrêt, l’exécution du code s’interrompt. Vous pouvez ensuite déboguer votre objet de base de données managée :

    1. Utilisez pas à pas à partir du menu Débogage pour faire avancer le pointeur d’instruction vers la ligne de code suivante.
    2. Utilisez la fenêtre Locals pour observer l’état des objets actuellement mis en surbrillance par le pointeur d’instruction.
    3. Ajoutez des variables à la fenêtre Espion . Vous pouvez observer l’état des variables surveillées tout au long de la session de débogage, même si la variable n’est pas à la ligne de code actuellement mise en surbrillance par le pointeur d’instruction.
    4. Sélectionnez Continuer dans le menu Débogage pour avancer le pointeur d’instruction vers le 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 de code

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

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

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

Exemple de script de test

Le script de test suivant montre comment appeler la GetVersion procédure stockée définie dans l’exemple précédent.

EXEC GetVersion  

Étapes suivantes

Pour plus d’informations sur le débogage de code managé à l’aide de Visual Studio, consultez Débogage de code managé dans la documentation de Visual Studio.

Pour plus d’informations, consultez les concepts de programmation d’intégration Common Language Runtime