Procédure : déboguer une application de base de données multicouches
Cette rubrique s'applique à :
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Cette rubrique contient un exemple de code qui illustre le débogage d'une application de base de données multicouches et décrit les étapes nécessaires pour déboguer à partir du code d'application qui réside dans une application cliente ou intermédiaire dans le code Transact-SQL d'un objet de base de données qui s'exécute à l'intérieur d'une instance de SQL Server à partir de SQL Server 2005.
Les transitions entre la couche application et la couche base de données requiert un point d'arrêt dans la couche cible ; sinon, le code s'exécutera sans s'arrêter lorsque vous essayez d'entrer dans la couche.Mais les transitions entre le code Transact-SQL et CLR SQL à l'intérieur de la couche de base de données ne nécessitent pas le débogage pas à pas entre les points d'arrêt.
L'exemple suivant utilise une application console C#, une table de base de données SQL Server nommée Currency, et deux procédures stockées pour basculer entre C# et Transact-SQL.L'objectif de l'exemple est d'illustrer ces transitions et il ne s'agit pas de toute évidence d'une application réelle.
Deux procédures stockées sont appelées :
DeleteCurrency est une procédure stockée Transact-SQL qui supprime une monnaie avec un code de monnaie donné.
DeleteCurrencyDriver est également une procédure stockée Transact-SQL.Elle appelle la procédure stockée précédente avec un paramètre d'entrée qui spécifie le code de monnaie à supprimer.
Le code d'application appelle les deux procédures stockées en passant un paramètre du code de la monnaie.La procédure stockée « non pilote » est appelée depuis deux contextes différents, de DeleteCurrencyDriver, et directement de l'application.Dans le premier contexte, vous pourrez effectuer un pas à pas détaillé de DeleteCurrencyDriver dans les autres procédures stockées en cliquant sur le bouton Pas à pas détaillé.Lorsqu'elles sont appelées depuis l'application, vous ne pourrez pas y effectuer un pas à pas détaillé directement et devrez définir des points d'arrêt à l'intérieur des procédures stockées.
Créer les objets de base de données Transact-SQL pour cette démonstration
Dans une base de données SQL Server 2005 ou ultérieure de votre choix, utilisez le code du premier exemple pour créer la table Currency et les deux procédures stockées.
Ouvrez l'éditeur Transact-SQLdans Visual Studio et connectez-vous à la base de données que vous pouvez utiliser pour cette démonstration.Pour plus d'informations, consultez Procédure : démarrer l'éditeur Transact-SQL et Procédure : se connecter à une base de données dans l'éditeur Transact-SQL.
Copiez le code Transact-SQL du premier exemple et collez-le dans l'éditeur Transact-SQL.
Remplacez <database> par le nom de la base de données approprié, puis cliquez sur Exécuter SQL dans la barre d'outils Éditeur Transact-SQL.
Si vous avez ouvert l'éditeur Transact-SQL dans le contexte d'un projet de base de données ou de serveur SQL Server, fermez le projet avant de continuer.Sinon, vous pouvez laisser l'éditeur Transact-SQL ouvert et continuez.
Préparer l'Explorateur de serveurs pour le débogage multicouches
Vérifiez que le débogage Transact-SQL a été activé pour votre ordinateur.Pour plus d'informations, consultez Procédure : activer le débogage Transact-SQL.
Ouvrez l'Explorateur de serveurs en ouvrant le menu Affichage et en cliquant sur Explorateur de serveurs.
Dans l'Explorateur de serveurs, créez une connexion de données en cliquant avec le bouton droit sur Connexions de données et en sélectionnant Ajouter une connexion.Cette opération va lancer la boîte de dialogue Ajouter une connexion.
Créez une connexion à la base de données où vous avez créé la table Currency.Il est important que les informations de connexion utilisées par la connexion appartiennent au rôle de serveur fixe sysadmin.Pour plus d'informations, consultez Procédure : se connecter à une base de données avec l'Explorateur de serveurs.
Après avoir créé la nouvelle connexion de données, localisez-la sous le nœud Connexions de données.
Cliquez avec le bouton droit sur votre nouvelle connexion de données et cliquez sur Débogage de l'application.Cette opération permet le débogage multicouches sur la base de données spécifiée dans la connexion.
Préparer votre application console C# au débogage multicouches
Dans la même instance Visual Studio que vous avez préparée l'Explorateur de serveurs, préparez une application console C# qui exécutera les procédures stockées DeleteCurrency et DeleteCurrencyDriver.
Ouvrez une nouvelle application console C# en ouvrant le menu Fichier et en cliquant sur Nouveau projet.
Copiez le code C# du deuxième exemple et utilisez-le pour remplacer l'ensemble du code dans le fichier Program.cs créé par le projet.
Dans les propriétés d'application console, sous l'onglet Débogage, vérifiez Activer le débogage SQL Server.Cette opération permet le débogage multicouches pour l'application console.Pour plus d'informations, consultez Procédure : activer le débogage Transact-SQL pour un projet C++, Visual Basic ou C#.
Déboguer votre application console multicouches
Dans votre code C# (fichier Program.cs), placez des points d'arrêt avant et après chaque appel à une procédure stockée.
Placez des points d'arrêt dans vos procédures stockées.Note : vous ne pouvez pas effectuer de pas à pas détaillé dans le code Transact-SQL à partir du code C#, mais vous pouvez effectuer un pas à pas détaillé entre les objets de base de données SQL Server.
Dans l'Explorateur de serveurs, localisez les nouvelles procédures stockées sous la nouvelle connexion de données.
Cliquez avec le bouton droit sur la procédure stockée DeleteCurrency et cliquez sur Ouvrir.Cela lancera une fenêtre de l'éditeur Transact-SQL qui affiche la procédure stockée DeleteCurrency.Définissez un point d'arrêt sur la ligne SET NOCOUNT ON en cliquant dans la barre grise à gauche de l'éditeur.
Cliquez avec le bouton droit sur la procédure stockée DeleteCurrencyDriver et cliquez sur Ouvrir.Cela lancera une fenêtre de l'éditeur Transact-SQL qui affiche la procédure stockée DeleteCurrencyDriver.Définissez un point d'arrêt sur la ligne SET NOCOUNT ON en cliquant dans la barre grise à gauche de l'éditeur.
Exécutez l'application en appuyant sur F5.
Effectuez un pas à pas dans les différents modules.
Essayez de supprimer certains des points d'arrêt pour voir ce que produit le fait de tenter un pas à pas entre différentes couches et langages.
Pour terminer de déboguer, effacez tous les points d'arrêt dans le menu Déboguer Visual Studio et appuyez sur F5.
Exemple
Cette section contient le code Transact-SQL qui crée la table Currency et les deux procédures stockées : DeleteCurrency et DeleteCurrencyDriver. Remplacez <database> par le nom de la base de données appropriée.
USE <database>
GO
CREATE TABLE Currency
(CurrencyCode nvarchar(1))
INSERT Currency
VALUES (N'A'),(N'B'),(N'C'),(N'D')
SELECT * FROM Currency
GO
CREATE PROCEDURE dbo.DeleteCurrency
(
@CurrencyCode nvarchar(3)
)
AS
SET NOCOUNT ON
DELETE Currency
WHERE CurrencyCode = @currencyCode
RETURN
GO
CREATE PROCEDURE dbo.DeleteCurrencyDriver
(
@CurrencyCode nvarchar(3)
)
AS
SET NOCOUNT ON
EXECUTE DeleteCurrency @CurrencyCode
RETURN
GO
Cette section contient le code C# de l'application console qui appelle les procédures stockées DeleteCurrency et DeleteCurrencyDriver.Remplacez <server> et <database>, respectivement, par le nom de l'instance et de la base de données où réside la table Currency.
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = <server>;
builder.IntegratedSecurity = true;
builder.InitialCatalog = <database>;
SqlConnection SqlConnection1 = new SqlConnection(builder.ConnectionString);
SqlConnection1.Open();
SqlCommand procCommand = new SqlCommand();
procCommand.CommandText = "DeleteCurrencyDriver";
procCommand.CommandType = CommandType.StoredProcedure;
procCommand.Connection = SqlConnection1;
// Fill parameters collection for the stored procedure.SqlParameter workParam = null;
workParam = procCommand.Parameters.Add("@CurrencyCode", SqlDbType.NChar, 1);
procCommand.Parameters["@CurrencyCode"].Value = "B";
try { procCommand.ExecuteNonQuery(); }
catch (SqlException e) { Console.WriteLine(e.Message); }
//Execute DeleteCurrency stored procedure directly
procCommand.CommandText = "DeleteCurrency";
try { procCommand.ExecuteNonQuery(); }
catch (SqlException e) { Console.WriteLine(e.Message); }
SqlConnection1.Close();
Console.WriteLine("Press any key to close...");
Console.Read();
}
}
}
Voir aussi
Tâches
Procédure : activer le débogage Transact-SQL pour un projet C++, Visual Basic ou C#