Procedura: eseguire il debug di oggetti database CLR

Si applica a:SQL Server

SQL Server fornisce il supporto per il debug di oggetti Transact-SQL e CLR (Common Language Runtime) nel database. Gli aspetti principali del debug in SQL Server sono la facilità di installazione e utilizzo e l'integrazione del debugger di SQL Server con il debugger di Microsoft Visual Studio. Inoltre, il debug funziona tra linguaggi diversi. Gli utenti possono passare senza problemi agli oggetti CLR da Transact-SQL e viceversa. Il debugger Transact-SQL in SQL Server Management Studio non può essere utilizzato per eseguire il debug di oggetti di database gestiti, ma è possibile eseguire il debug degli oggetti tramite i debugger disponibili in Visual Studio. Il debug di oggetti di database gestiti in Visual Studio supporta tutte le caratteristiche di debug comuni, ad esempio l'esecuzione di istruzioni e routine all'interno di routine in esecuzione nel server. Tramite i debugger è possibile impostare punti di interruzione, controllare lo stack di chiamate, controllare le variabili e modificarne i valori durante il debug.

Nota

Visual Studio .NET 2003 non può essere usato per la programmazione o il debug dell'integrazione CLR. SQL Server viene fornito con .NET Framework preinstallato e non è possibile usare assembly di .NET Framework 2.0 in Visual Studio .NET 2003.

Debug di autorizzazioni e restrizioni

Il debug è un’operazione con privilegi elevati, pertanto, solo i membri del ruolo predefinito del server amministratore di sistema possono eseguire il debug in SQL Server.

Durante il debug vengono applicate le restrizioni seguenti:

  • Il debug di routine CLR è limitato a un'istanza di debugger alla volta. Questa limitazione viene applicata poiché qualsiasi esecuzione di codice CLR si blocca quando viene raggiunto un punto di interruzione e non continua finché il debugger non supera il punto di interruzione. Tuttavia, è possibile continuare il debug di Transact-SQL in altre connessioni. Benché il debug di Transact-SQL non blocchi altre esecuzioni nel server, può causare l'attesa di altre connessioni mantenendo un blocco.

  • Non è possibile eseguire il debug delle connessioni esistenti, ma solo di quelle nuove, poiché SQL Server richiede informazioni sul client e sull'ambiente del debugger prima di poter stabilire la connessione.

A causa delle restrizioni indicate sopra, si consiglia di eseguire il debug del codice Transact-SQL e di CLR in un server di test, non in un server di produzione.

Panoramica

Il debug in SQL Server si basa su un modello per connessione. Un debugger può rilevare le attività ed eseguirne il debug solo nella connessione client a cui è connesso. Poiché la funzionalità del debugger non è limitata dal tipo di connessione, è possibile eseguire il debug sia di connessioni del flusso TDS sia di connessioni HTTP. Tuttavia, SQL Server non consente il debug delle connessioni esistenti. Il debug supporta tutte le caratteristiche di debug comuni all'interno di routine in esecuzione nel server. L'interazione tra un debugger e SQL Server viene effettuata tramite Distributed Component Object Model (COM).

Per altre informazioni e scenari sul debug di stored procedure gestite, funzioni, trigger, tipi definiti dall'utente e aggregazioni, vedi Debug del database di integrazione CLR di SQL Server nella documentazione di Visual Studio.

È necessario abilitare il protocollo di rete TCP/IP nell'istanza di SQL Server per usare Visual Studio per lo sviluppo e il debug remoti. Per altre informazioni sull'abilitazione del protocollo TCP/IP nel server, vedi Configurare i protocolli client.

Procedura di debug

Usare la procedura seguente per eseguire il debug di un oggetto database CLR in Microsoft Visual Studio:

  1. Apri Microsoft Visual Studio e seleziona Crea un nuovo progetto SQL Server. Puoi usare l'istanza di SQL Local DB fornita con Visual Studio.

  2. Crea un nuovo tipo CLR SQL (C#):

    1. Fai clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e seleziona Aggiungi, Nuovo articolo....
    2. Nella finestra Aggiungi nuovo articolo seleziona Stored procedure SQL CLR C#, Funzione definita dall'utente SQL CLR C#, Tipo definito dall’utente SQL CLR C#, Grilletto SQL CLR C#, Aggregazione SQL CLR C# o Classe.
    3. Specifica un nome per il file di origine del nuovo tipo e quindi seleziona Aggiungi.
  3. Aggiungere il codice per il nuovo tipo nell'editor di testo. Per un codice di esempio relativo a un esempio di stored procedure, vedei la sezione Esempi più avanti in questo articolo.

  4. Aggiungi uno script di test per il tipo:

    1. In Esplora soluzioni fai clic con il pulsante destro del mouse sul nodo progetto e seleziona Aggiungi, Script....
    2. Nella finestra Aggiungi nuovo articolo seleziona Script (Non in compilazione) e specifica un nome, ad esempio Test.sql. Seleziona il pulsante Aggiungi.
    3. In Esplora soluzioni fai doppio clic sul Test.sql nodo per aprire il file di origine dello script di test predefinito.
    4. Aggiungi nell'editor di testo uno script di test (che richiama il codice di cui eseguire il debug). Vedi l'esempio nella sezione successiva per uno script campione.
  5. Inserire uno o più punti di interruzione nel codice sorgente. Fai clic con il pulsante destro del mouse su una riga di codice nell'editor di testo nella funzione o nella routine di cui vuoi eseguire il debug. Seleziona Punto di interruzione, Inserisci punto di interruzione. Il punto di interruzione viene aggiunto e la riga di codice viene evidenziata in rosso.

  6. Nel menu Debug seleziona Avvia debug per generare, implementare e testare il progetto. Verrà eseguito lo script di test in Test.sql e verrà richiamato l'oggetto di database gestito.

  7. Quando la freccia gialla (che indica il puntatore all'istruzione) viene visualizzata in corrispondenza del punto di interruzione, l'esecuzione del codice viene sospesa. È quindi possibile eseguire il debug dell'oggetto di database gestito:

    1. Usa Passaggio dal menu Debug per spostare il puntatore dell'istruzione alla riga di codice successiva.
    2. Usa la finestra Locali per osservare lo stato degli oggetti attualmente evidenziati dal puntatore dell'istruzione.
    3. Aggiungere variabili alla finestra Espressioni di controllo. È possibile osservare lo stato delle variabili controllate durante l'intera sessione di debug, non solo quando la variabile non si trova nella riga di codice attualmente evidenziata dal puntatore dell'istruzione.
    4. Seleziona Continua dal menu Debug per fare avanzare il puntatore dell'istruzione al successivo punto di interruzione o per completare l'esecuzione della routine se non sono presenti altri punti di interruzione.

Codice di esempio

Nell'esempio seguente viene restituita al chiamante la versione di SQL Server.

using System.Data.SqlClient;
using Microsoft.SqlServer.Server;

public class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void GetVersion()
    {
        using (var connection = new SqlConnection("context connection=true"))
        {
            connection.Open();
            var command = new SqlCommand("select @@version", connection);
            SqlContext.Pipe.ExecuteAndSend(command);
        }
    }
}

Script di test di esempio

Lo script di test seguente illustra come richiamare la stored procedure GetVersion definita nell'esempio precedente.

EXEC GetVersion  

Passaggi successivi

Per altre informazioni sull'uso di Visual Studio per il debug di codice gestito, vedi Debug di codice gestito nella documentazione di Visual Studio.

Per altre informazioni, vedere Concetti relativi alla programmazione dell'integrazione con CLR (Common Language Runtime).