Debuggen von CLR-Datenbankobjekten

Gilt für:SQL Server

SQL Server bietet Unterstützung für das Debuggen von Transact-SQL- und Common Language Runtime (CLR)-Objekten in der Datenbank. Die wichtigsten Aspekte des Debuggens in SQL Server sind die einfache Einrichtung und Verwendung sowie die Integration des SQL Server-Debuggers mit dem Microsoft Visual Studio-Debugger. Darüber hinaus ist das Debuggen sprachübergreifend. Benutzer können nahtlos in CLR-Objekte von Transact-SQL wechseln und umgekehrt. Der Transact-SQL-Debugger in SQL Server Management Studio kann nicht verwendet werden, um Datenbankobjekte zu debuggen, aber Sie können die Objekte debuggen, indem Sie die Debugger in Visual Studio verwenden. Das Debuggen verwalteter Datenbankobjekte in Visual Studio unterstützt alle gängigen Debugfunktionen, wie z. B. „Einzelschritt“- und „Prozedurschritt“-Anweisungen innerhalb von Routinen, die auf dem Server ausgeführt werden. Debugger können während des Debuggens Breakpoints festlegen, Aufruflisten prüfen, Variablen prüfen und Variablenwerte ändern.

Hinweis

Visual Studio .NET 2003 kann nicht für die CLR-Integrationsprogrammierung oder das Debuggen verwendet werden. SQL Server enthält das vorinstallierte .NET Framework, und Visual Studio .NET 2003 kann die .NET Framework 2.0-Assemblys nicht verwenden.

Debuggen von Berechtigungen und Einschränkungen

Das Debuggen ist ein Vorgang mit hoher Berechtigung, und daher dürfen nur Mitglieder der festen Serverrolle "sysadmin " dies in SQL Server tun.

Während des Debuggens gelten die folgenden Einschränkungen:

  • Das Debuggen von CLR-Routinen kann nur von einer Debugger-Instanz gleichzeitig vorgenommen werden. Diese Einschränkung ist vorhanden, da jegliche CLR-Codeausführung eingefroren wird, wenn der Breakpoint erreicht wird, und die Ausführung wird erst fortgesetzt, wenn sich der Debugger vom Breakpoint fortbewegt. Sie können transact-SQL jedoch weiterhin in anderen Verbindungen debuggen. Obwohl transact-SQL-Debugging andere Ausführungen auf dem Server nicht fixiert, kann es dazu führen, dass andere Verbindungen warten, indem eine Sperre gehalten wird.

  • Vorhandene Verbindungen können nicht gedebuggt werden, nur neue Verbindungen, da SQL Server Informationen zur Client- und Debuggerumgebung benötigt, bevor die Verbindung hergestellt werden kann.

Aufgrund der oben genannten Einschränkungen wird empfohlen, Transact-SQL- und CLR-Code auf einem Testserver und nicht auf einem Produktionsserver zu debuggen.

Übersicht

Das Debuggen in SQL Server folgt einem Modell pro Verbindung. Ein Debugger kann nur Aktivitäten zu einer Clientverbindung erkennen und debuggen, mit der er verknüpft ist. Da die Funktionalität eines Debuggers nicht durch den Verbindungstyp eingeschränkt wird, können sowohl TDS- (Tabular Data Stream) als auch HTTP-Verbindungen gedebuggt werden. Sql Server lässt jedoch das Debuggen vorhandener Verbindungen nicht zu. Das Debuggen unterstützt alle üblichen Debugfunktionen innerhalb von Routinen, die auf dem Server ausgeführt werden. Die Interaktion zwischen einem Debugger und SQL Server erfolgt über verteiltes Component Object Model (COM).

Weitere Informationen und Szenarien zum Debuggen von verwalteten gespeicherten Prozeduren, Funktionen, Triggern, benutzerdefinierten Typen und Aggregaten finden Sie in der Visual Studio-Dokumentation unter SQL Server CLR-Integrationsdatenbankdebugging .

Das TCP/IP-Netzwerkprotokoll muss in der SQL Server-Instanz aktiviert sein, um Visual Studio für die Remoteentwicklung, das Debuggen und die Entwicklung zu verwenden. Weitere Informationen zum Aktivieren des TCP/IP-Protokolls auf dem Server finden Sie unter Konfigurieren von Clientprotokollen.

Debuggingschritte

Führen Sie die folgenden Schritte aus, um ein CLR-Datenbankobjekt in Microsoft Visual Studio zu debuggen:

  1. Öffnen Sie Microsoft Visual Studio, und erstellen Sie ein neues SQL Server-Projekt. Sie können die SQL LocalDB-Instanz verwenden, die im Lieferumfang von Visual Studio enthalten ist.

  2. Erstellen eines neuen SQL CLR-Typs (C#):

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie "Hinzufügen", "Neues Element" aus.
    2. Wählen Sie im Fenster "Neues Element hinzufügen" sql CLR C# Gespeicherte Prozedur, SQL CLR C# Benutzerdefinierte Funktion, SQL CLR C# Benutzerdefinierter Typ, SQL CLR C#-Trigger, SQL CLR C#-Aggregat oder Klasse aus.
    3. Geben Sie einen Namen für die Quelldatei des neuen Typs an, und wählen Sie dann "Hinzufügen" aus.
  3. Fügen Sie Code für den neuen Typ zum Texteditor hinzu. Beispielcode für eine gespeicherte Beispielprozedur finden Sie im folgenden Beispielabschnitt in diesem Artikel.

  4. Fügen Sie ein Skript hinzu, das den Typ testet:

    1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie "Hinzufügen", "Skript..." aus.
    2. Wählen Sie im Fenster "Neues Element hinzufügen" die Option "Skript ( Nicht im Build)" aus, und geben Sie einen Namen an, z Test.sql. B. . Wählen Sie die Schaltfläche Hinzufügen aus.
    3. Doppelklicken Sie im Projektmappen-Explorer auf den Test.sql Knoten, um die Quelldatei des Standardtestskripts zu öffnen.
    4. Fügen Sie das Testskript (ein Skript, das den zu debuggenden Code aufruft) zum Text-Editor hinzu. Ein Beispielskript finden Sie im nächsten Abschnitt.
  5. Platzieren Sie einen oder mehrere Breakpoints im Quellcode. Klicken Sie mit der rechten Maustaste auf eine Codezeile im Text-Editor für die Funktion oder Routine, die Sie debuggen möchten. Wählen Sie "Haltepunkt" aus, "Haltepunkt einfügen". Der Breakpoint wird hinzugefügt und hebt die Codezeile in Rot hervor.

  6. Wählen Sie im Menü "Debuggen " die Option "Debuggen starten" aus, um das Projekt zu kompilieren, bereitzustellen und zu testen. Das Testskript wird Test.sql ausgeführt, und das verwaltete Datenbankobjekt wird aufgerufen.

  7. Wenn der gelbe Pfeil (den Anweisungszeiger entwerfen) am Haltepunkt angezeigt wird, wird die Codeausführung angehalten. Anschließend können Sie das verwaltete Datenbankobjekt debuggen:

    1. Verwenden Sie Schritt-Over aus dem Menü "Debuggen ", um den Anweisungszeiger auf die nächste Codezeile zu setzen.
    2. Verwenden Sie das Fenster "Locals ", um den Zustand der objekte zu beobachten, die derzeit vom Anweisungszeiger hervorgehoben sind.
    3. Fügen Sie dem Überwachungsfenster Variablen hinzu. Sie können den Zustand überwachter Variablen während der gesamten Debugsitzung beobachten, auch wenn sich die Variable nicht in der Codezeile befindet, die derzeit vom Anweisungszeiger hervorgehoben ist.
    4. Wählen Sie "Weiter" im Menü "Debuggen" aus, um den Anweisungszeiger zum nächsten Haltepunkt zu wechseln oder die Ausführung der Routine abzuschließen, wenn keine Haltepunkte mehr vorhanden sind.

Beispielcode

Im folgenden Beispiel wird die SQL Server-Version an den Aufrufer zurückgegeben.

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

Beispiel-Testskript

Das folgende Testskript zeigt, wie die GetVersion im vorherigen Beispiel definierte gespeicherte Prozedur aufgerufen wird.

EXEC GetVersion  

Nächste Schritte

Weitere Informationen zum Debuggen von verwaltetem Code mit Visual Studio finden Sie unter Debuggen von verwaltetem Code in der Visual Studio-Dokumentation.

Weitere Informationen finden Sie unter Programmierkonzepte für die Integration von Common Language Runtime