Procédure pas à pas : débogage d'un déclencheur SQL CLR
Cette rubrique s'applique à :
Édition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
||||
Standard |
||||
Pro et Team |
Cet exemple explique comment déboguer un déclencheur CLR SQL. Il utilise la table Contact dans l'exemple de base de données AdventureWorks qui est l'une des bases de données installées avec SQL Server 2005. L'exemple crée un déclencheur d'insertion CLR SQL dans la table Contact, puis l'exécute en mode pas à pas.
Si, lorsque vous essayez de déboguer un objet CLR SQL, le message « Annulé par l'utilisateur » s'affiche, vous devez manuellement configurer à la fois l'ordinateur sur lequel vous exécutez Visual Studio et celui qui exécute SQL Server. Pour plus d'informations, consultez Comment : configurer vos ordinateurs pour activer le débogage Transact-SQL et CLR SQL.
Notes
Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée. Pour modifier vos paramètres, choisissez Importation et exportation de paramètres dans le menu Outils. Pour plus d'informations, consultez Utilisation des paramètres.
Pour déboguer un déclencheur CLR SQL :
Dans un nouveau projet CLR SQL, établissez une connexion à la base de données AdventureWorks. Pour plus d'informations, consultez How to: Connect to a Database.
Créez un déclencheur à l'aide du code dans la première section d'exemple ci-dessous et nommez-le iContact.cs. Pour plus d'informations, consultez How to: Develop with the SQL Server Project Type.
Ajoutez un script qui teste le déclencheur en l'obligeant à se déclencher. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le répertoire TestScripts, cliquez sur Ajouter un script de test et insérez le code de la deuxième section d'exemple ci-dessous. Enregistrez le fichier avec le nom truContact.sql. Cliquez avec le bouton droit sur le nom du fichier et cliquez sur Définir comme script de débogage par défaut.
Définissez des points d'arrêt dans iContact.cs, puis cliquez sur Démarrer dans le menu Déboguer pour compiler, déployer et effectuer un test unitaire sur le projet. Lorsque le pointeur d'instruction, désigné par une flèche jaune, apparaît sur le point d'arrêt, cela signifie que vous êtes en train de déboguer votre fonction.
Testez différentes fonctionnalités de débogage.
Dépassez l'instruction instanciant le SqlTriggerContext.
Ouvrez la fenêtre Variables locales. Remarquez que vous pouvez ouvrir la variable triggContext, qui est un SqlTriggerContext, et examiner ses membres. Pour plus d'informations, consultez Comment : utiliser les fenêtres des variables du débogueur.
Notes
Il est possible que le serveur ne reflète pas les modifications apportées aux valeurs des variables dans les fenêtres du débogueur. Pour plus d'informations, consultez Limitations du débogage SQL.
Sélectionnez Pas à pas détaillé dans le menu Déboguer pour passer à la ligne suivante dans la procédure stockée. Remarquez que l'exécution a instancié la valeur de la variable sqlP de type SqlPipe.
Ouvrez la fenêtre Espion. Faites glisser la variable sqlP n'importe où dans la fenêtre Espion. La variable est désormais ajoutée à la liste des variables espionnées. Pour plus d'informations, consultez Comment : utiliser les fenêtres des variables du débogueur.
Notes
Vous pouvez également modifier les valeurs des variables dans la fenêtre Espion.
Dans l'Éditeur de texte, cliquez avec le bouton droit sur la dernière ligne, puis cliquez sur Insérer un point d'arrêt.
Dans le menu Déboguer, cliquez sur Continuer, pour que le débogueur exécute le code jusqu'au nouveau point d'arrêt.
Cliquez de nouveau sur Continuer pour terminer de déboguer le déclencheur. Un message apparaît dans la fenêtre Sortie, qui déclare que le déclencheur a été déployé avec succès et affiche le résultat de l'exécution des commandes dans le fichier truContact.sql.
Exemple
Voici le code servant à créer le déclencheur utilisé dans cet exemple.
using System;
using System.Data;
using System.Data.Sql;
using Microsoft.SqlServer.Server;
public partial class Triggers
{
// Enter existing table or view for the target and uncomment the attribute line.
[Microsoft.SqlServer.Server.SqlTrigger (Name="Trigger1", Target="primes", Event="FOR UPDATE")]
public static void Trigger1()
{
SqlTriggerContext triggContext = SqlContext.TriggerContext;
SqlPipe sqlP = SqlContext.Pipe;
sqlP.Send("primes inserted!");
}
}
Voici le script de test qui provoquera le déclenchement du déclencheur.
UPDATE Person.Contact SET MiddleName = 'A' WHERE ContactID = 8