Condividi tramite


Procedura dettagliata: esecuzione del debug di un tipo CLR SQL definito dall'utente

Aggiornamento: novembre 2007

Le informazioni contenute in questo argomento sono valide per:

Edition

Visual Basic

C#

C++

Web Developer

Express

Argomento non applicabile Argomento non applicabile Argomento non applicabile Argomento non applicabile

Standard

Argomento non applicabile Argomento non applicabile Argomento non applicabile Argomento non applicabile

Pro e Team

Argomento applicabile Argomento applicabile Argomento applicabile Argomento applicabile

Legenda tabella:

Argomento applicabile

Applicabile

Argomento non applicabile

Non applicabile

Argomento valido ma comando nascosto per impostazione predefinita

Comando o comandi nascosti per impostazione predefinita.

In questo esempio viene illustrato come eseguire il debug di un tipo CLR SQL definito dall'utente. Un nuovo tipo CLR SQL viene creato nel database di esempio AdventureWorks. Il tipo viene quindi utilizzato in una definizione di tabella, in un'istruzione INSERT e infine in un'istruzione SELECT.

Nota:

Le finestre di dialogo e i comandi di menu visualizzati potrebbero non corrispondere a quelli descritti nella Guida in linea in quanto dipendono dall'edizione o dalle impostazioni attive. Per modificare le impostazioni, scegliere Importa/esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Per eseguire il debug di un tipo CLR SQL definito dall'utente

  1. In un nuovo progetto SQL Server stabilire una connessione al database di esempio AdventureWorks. Per ulteriori informazioni, vedere Procedura: connettersi a un database.

  2. Creare un nuovo tipo utilizzando il codice della prima sezione relativa agli esempi e denominarlo Point.cs. Per ulteriori informazioni, vedere Procedura: sviluppare con il tipo di progetto SQL Server.

  3. Aggiungere uno script di prova per il tipo. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla directory Script di test, scegliere Aggiungi script di prova e inserire il codice contenuto nella seconda sezione relativa agli esempi. Salvare il file con il nome Point.sql. Fare clic con il pulsante destro del mouse e scegliere Imposta come script di debug predefinito.

  4. Aggiungere punti di interruzione.

    1. Nella cartella Tipi di Esplora server aprire Point.

    2. Inserire un punto di interruzione all'interno di ogni metodo in modo da poter osservare il flusso di controllo all'interno del tipo.

  5. Scegliere Avvia dal menu Debug per compilare e distribuire il progetto, nonché per eseguirne l'unit test. Quando il puntatore all'istruzione, indicato da una freccia gialla, compare su un punto di interruzione, è in corso il debug della funzione.

  6. Provare più funzionalità di debug.

    1. Il metodo Parse viene eseguito una volta per ogni istruzione INSERT nello script in Point.sql. Scegliendo ripetutamente Esegui istruzione dal menu Debug, è possibile controllare la modalità con cui il metodo converte una coppia di numeri delimitata da due punti in un oggetto Point.

    2. Nella finestra Variabili locali aprire la variabile pt contenente il Point corrente in fase di generazione.

    3. Nell'editor di testo fare doppio clic sulla variabile pt per selezionarla. Trascinare pt in un punto qualsiasi della finestra Espressioni di controllo. pt verrà aggiunto all'elenco di variabili di controllo e sarà possibile osservarlo durante la generazione di Point.

    4. Eseguire più volte, un'istruzione alla volta, la classe e osservare le differenze tra il percorso intrapreso da INSERT e da SELECT.

    5. Scegliere nuovamente Continua per terminare il debug della funzione.

Esempio

Questo codice definisce il tipo utilizzato in questo esempio. Viene creata una tabella denominata Punti, all'interno della quale vengono inserite righe, quindi ne viene visualizzato il contenuto. Si noti che non è necessario includere il comando batch GO tra la creazione della tabella e l'accesso a essa. In effetti Visual Studio 2005 interpreterà GO come un comando SQL non valido.

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; }
    }
}

Script di prova che chiama la funzione.

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

Vedere anche

Attività

Procedura: creare ed eseguire un tipo CLR definito dall'utente di SQL Server

Altre risorse

Esecuzione del debug di database CLR SQL