Share via


Procédure pas à pas : débogage d'un type SQL CLR défini par l'utilisateur

Mise à jour : novembre 2007

Cette rubrique s'applique à :

Édition

Visual Basic

C#

C++

Web Developer

Express

La rubrique ne s'applique pas La rubrique ne s'applique pas La rubrique ne s'applique pas La rubrique ne s'applique pas

Standard

La rubrique ne s'applique pas La rubrique ne s'applique pas La rubrique ne s'applique pas La rubrique ne s'applique pas

Pro et Team

La rubrique s'applique La rubrique s'applique La rubrique s'applique La rubrique s'applique

Légende du tableau :

La rubrique s'applique

Applicable

La rubrique ne s'applique pas

Non applicable

La rubrique s'applique mais la commande est masquée par défaut

Commande ou commandes masquées par défaut.

Cet exemple indique comment déboguer un type CLR SQL défini par l'utilisateur. Il crée un type CLR SQL dans l'exemple de base de données AdventureWorks. Le type est ensuite utilisé dans une définition de table, une instruction INSERT, puis une instruction SELECT.

Remarque :

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 Paramètres Visual Studio.

Pour déboguer un type CLR SQL défini par l'utilisateur

  1. Dans un nouveau projet SQL Server, établissez une connexion à l'exemple de base de données AdventureWorks. Pour plus d'informations, consultez Comment : se connecter à une base de données.

  2. Créez un type à l'aide du code de la première section de l'exemple ci-après et nommez-le Point.cs. Pour plus d'informations, consultez Comment : développer avec le type de projet SQL Server.

  3. Ajoutez un script qui teste le type. 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 Point.sql. Cliquez avec le bouton droit sur le nom du fichier et cliquez sur Définir comme script de débogage par défaut.

  4. Ajouter des points d'arrêt.

    1. Dans le dossier Types de l'Explorateur de serveurs, ouvrez Point.

    2. Placez un point d'arrêt dans chaque méthode afin de pouvoir observer le flux de contrôle à l'intérieur du type.

  5. Dans le menu Déboguer, choisissez Démarrer pour compiler, déployer et effectuer un test unitaire du 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.

  6. Testez différentes fonctionnalités de débogage.

    1. La méthode Parse s'exécute une fois pour chaque instruction INSERT du script dans Point.sql. En cliquant à plusieurs reprises sur Pas à pas détaillé dans le menu Déboguer, vous pouvez surveiller la façon dont la méthode convertit une paire de nombres délimités par deux-points en un objet Point.

    2. Dans la fenêtre Variables locales, ouvrez la variable pt contenant le Point actuel en cours de génération.

    3. Dans l'Éditeur de texte, double-cliquez sur la variable pt pour la sélectionner. Faites glisser pt n'importe où sur la fenêtre Espion. pt est maintenant ajouté à la liste des variables surveillées et vous pouvez l'observer au fur et à mesure de la génération de Point.

    4. Exécutez la classe pas à pas plusieurs fois et observez les différences entre les chemins d'accès empruntés par un INSERT et un SELECT.

    5. Choisissez de nouveau Continuer pour terminer le débogage de la fonction.

Exemple

Voici le code servant à définir le type utilisé dans cet exemple. Ce code crée une table nommée Points, y insère des lignes et affiche son contenu. Notez que vous ne devez pas inclure la commande batch GO entre la création de la table et son accès. D'ailleurs, Visual Studio 2005 interprétera la commande GO comme une commande SQL non valide.

using System;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Runtime.Serialization;

[Serializable, SqlUserDefinedTypeAttribute(Format.Native)]
public struct Point: INullable
{
    private bool m_isNull;
    private double m_x;
    private double m_y;

    public bool IsNull {
        get { return (m_isNull); }
    }

    public override string ToString()
    {
        if (this.IsNull) { return "NULL"; }
        else { return this.m_x + ":" + this.m_y; }
    }

    public static Point Parse(SqlString s)
    {
        if (s.IsNull) { return Null; }
        else
        {
            // Parse input string here to separate out points:
            Point pt = new Point();
            string str = Convert.ToString(s);
            string[] xy = str.Split(':');

            pt.X = Convert.ToDouble(xy[0]);
            pt.Y = Convert.ToDouble(xy[1]);
            return (pt);
        }
    }

    public static Point Null
    {
        get
        {
            Point pt = new Point();
            pt. m_isNull = true;
            return (pt);
        }
    }

    public double X
    {
        get { return (this.m_x); }
        set { m_x = value; }
    }

    public double Y
    {
        get { return (this.m_y); }
        set { m_y = value; }
    }
}

Voici le script de test qui appelle la fonction.

CREATE TABLE dbo.Points ( 
            ID int IDENTITY(1,1) PRIMARY KEY, 
            Pnt Point) 
INSERT INTO dbo.Points (Pnt) VALUES (CONVERT(Point, '3:4')) 
INSERT INTO dbo.Points (Pnt) VALUES (CONVERT(Point, '-1:5')) 
INSERT INTO dbo.Points (Pnt) VALUES (CAST ('1:99' AS Point)) 
SELECT ID, 
        Pnt.ToString() as StringPoint, 
        Pnt.X as X, 
        Pnt.Y as Y      
FROM dbo.Points

Voir aussi

Tâches

Comment : créer et exécuter un type défini par l'utilisateur SQL Server CLR

Autres ressources

Débogage d'une base de données SQL CLR