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 (Common Language Runtime) dans la base de données. Les aspects clés 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 entrer en toute transparence dans des 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. 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 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 gèle pas d'autres exécutions sur le serveur, il pourrait entraîner la suspension d'autres connexions par l'application d'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 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 du débogage des objets de base de données managés

Le débogage dans SQL Server fonctionne selon 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 d’objet COM (Distributed Component Object Model).

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

Le protocole réseau TCP/IP doit être activé sur le SQL Server instance 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 client.

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

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

  2. Créez un type. Dans Explorateur de solutions, cliquez avec le bouton droit sur le projet, sélectionnez Ajouter et nouvel élément... Dans la fenêtre Ajouter un nouvel élément, sélectionnez Procédure stockée, Fonction définie parl’utilisateur, Type défini par l’utilisateur, Déclencheur, Agrégation ou Classe. Spécifiez un nom pour le fichier source du nouveau type, puis 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 Explorateur de solutions, développez le répertoire TestScripts double-cliquez sur Test.sql pour ouvrir le fichier source de 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, puis 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. Dans le menu Déboguer , sélectionnez Démarrer le débogage 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é. Vous pouvez passer à pas à pas à partir du menu Déboguer pour faire avancer le pointeur d’instruction vers la ligne de code suivante. La fenêtre Locals permet d’observer l’état des objets actuellement 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 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  

Voir aussi

Concepts de programmation pour l'intégration du CLR