Procédure pas à pas : débogage d'une fonction scalaire SQL CLR définie par l'utilisateur
Cette rubrique s'applique à :
Édition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
||||
Standard |
||||
Pro et Team |
Cet exemple explique comment déboguer une fonction définie par l'utilisateur CLR SQL (Common Language Run-time) SQL Server. Il crée une fonction définie par l'utilisateur CLR SQL dans l'exemple de base de données AdventureWorks.
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 une fonction scalaire CLR SQL définie par l'utilisateur
Dans un nouveau projet SQL CLR, établissez une connexion à l'exemple de base de données AdventureWorks. Pour plus d'informations, consultez How to: Connect to a Database.
Créez une fonction à l'aide du code dans la première section d'exemple ci-dessous et nommez-la OrderCount.cs. Pour plus d'informations, consultez How to: Develop with the SQL Server Project Type.
Ajoutez un script qui teste la fonction en l'incluant dans une instruction SELECT. 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 sous le nom CallOrderCount.sql. Cliquez avec le bouton droit sur le nom du fichier et sélectionnez Définir comme script de débogage par défaut.
Placez un point d'arrêt dans OrderCount.cs sur la ligne qui instancie un SqlCommand, puis dans le menu Déboguer, cliquez sur Démarrer pour compiler, déployer et effectuer un test unitaire sur le projet. L'apparition du pointeur d'instruction (désigné par une flèche jaune) sur le point d'arrêt signifie que vous êtes en train de déboguer votre fonction.
Testez différentes fonctionnalités de débogage.
Dépassez l'instruction qui instancie SqlCommand à l'aide de Pas à pas détaillé dans le menu Déboguer.
Dans la fenêtre Variables locales, ouvrez la variable sqlComm, qui est une SqlCommand, et examinez ses membres.
Cliquez sur Pas à pas détaillé dans le menu Déboguer pour avancer d'une ligne dans la fonction. Notez que le membre sqlComm.CommandText a été instancié.
Dans l'Éditeur de texte, faites glisser sqlComm n'importe où dans la fenêtre Espion. La variable est désormais ajoutée à la liste des variables espionnées.
Sélectionnez de nouveau Pas à pas détaillé. Remarquez qu'une nouvelle fenêtre intitulée T-SQL dynamique s'ouvre, qui affiche l'instruction SQL sur le point d'être exécutée.
Sélectionnez Pas à pas détaillé pour exécuter l'instruction et retourner à la fonction.
Appuyez de nouveau sur Continuer, et remarquez la deuxième fenêtre T-SQL dynamique qui s'ouvre et affiche le code qui retourne la valeur de la fonction.
Choisissez de nouveau Continuer pour terminer le débogage de la fonction.
Exemple
Voici le code nécessaire pour créer la fonction.
using System;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
public static int OrderCount()
{
using (SqlConnection conn = new SqlConnection("context connection=true"))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT 42";
//cmd = new SqlCommand("SELECT 42",conn);
int result = (int)cmd.ExecuteScalar();
return result;
}
}
};
Voici le script de test qui appelle la fonction.
SELECT dbo.OrderCount()