Gewusst wie: Debuggen von CLR-Datenbankobjekten

Gilt für: SQL Server

SQL Server stellt Unterstützung für das Debuggen von Transact-SQL und CLR-Objekten (Common Language Runtime) in der Datenbank bereit. Die Hauptaspekte des Debuggens in SQL Server sind die leichte Einrichtung und Handhabung und die Integration des SQL Server-Debuggers in den Microsoft Visual Studio-Debugger. Darüber hinaus ist das Debuggen sprachübergreifend. Benutzer können von Transact-SQL aus nahtlos in CLR-Objekte einsteigen 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

Beachten Sie, dass Visual Studio .NET 2003 nicht für CLR-Integrationsprogrammierung oder das Debuggen verwendet werden kann. SQL Server beinhaltet ein vorinstalliertes .NET Framework, und Visual Studio .NET 2003 kann nicht die .NET Framework 2.0-Assemblys verwenden.

Debuggen von Berechtigungen und Einschränkungen

Das Debuggen ist ein hoch privilegierter Vorgang und daher nur Mitgliedern der festen Serverrolle sysadmin in SQL Server gestattet.

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. Allerdings können Sie das Debuggen von Transact-SQL auf anderen Verbindungen fortführen. Obwohl das Transact-SQL-Debuggen keine anderen Ausführungen auf dem Server einfriert, könnte es dazu führen, dass durch Aufrechterhaltung einer Sperre andere Verbindungen warten.

  • Für vorhandene Verbindungen kann kein Debuggen vorgenommen werden. Nur neue Verbindungen, wie SQL Server, erfordern Informationen über die Client- und Debugger-Umgebung, bevor die Verbindung hergestellt werden kann.

Aufgrund der oben genannten Einschränkungen empfehlen wir, dass Transact-SQL und CLR-Code auf einem Testserver und nicht auf einem Produktionsserver debuggt werden.

Übersicht

Das Debugging in SQL Server folgt einem Pro-Verbindung-Modell. 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. Allerdings ermöglicht SQL Server nicht das Debuggen vorhandener Verbindungen. 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 das verteilte Component Object Model (COM).

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

Das TCP/IP-Netzwerkprotokoll muss auf der SQL Server-Instanz aktiviert sein, um Visual Studio für die Remote-Entwicklung, das Debugging und die Entwicklung verwenden zu können. 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, Neuer Artikel....
    2. Im Fenster Neuen Artikel hinzufügen wählen Sie SQL CLR C# gespeicherte Prozedur, SQL CLR C# benutzerdefinierte Funktion, SQL CLR C# benutzerdefinierter Typ, SQL CLR C# Trigger, SQL CLR C# Aggregate oder Klasse.
    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 ein als Beispiel gespeicherte Prozedur finden Sie in einem nachfolgenden Abschnitt 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 Projekt-Node, und wählen Sie Hinzufügen, Skript aus.
    2. Wählen Sie im Fenster Neuen Artikel hinzufügen die Option Skript (Nicht im Build) aus, und geben Sie einen Namen an, wie z B. Test.sql. Wählen Sie die Schaltfläche Hinzufügen aus.
    3. Doppelklicken Sie in Projektmappen-Explorer auf den Test.sql Node, um die Standardquelldatei des Testskripts zu öffnen.
    4. Fügen Sie das Testskript (das den zu debuggenden Code aufruft) in den Texteditor ein. 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 Texteditor in der Funktion oder Routine, die Sie debuggen möchten. Wählen Sie Breakpoint, Breakpoint einfügen aus. 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 auszufüllen, bereitzustellen und zu testen. Das Testskript in Test.sql wird ausgeführt und das verwaltete Datenbankobjekt wird aufgerufen.

  7. Wenn der gelbe Pfeil (der den Befehlszeiger kennzeichnet) am Breakpoint erscheint, wird die Codeausführung angehalten. Anschließend können Sie das verwaltete Datenbankobjekt debuggen:

    1. Verwenden Sie Überspringen aus dem Menü Debuggen, um den Befehlszeiger auf die nächste Codezeile zu setzen.
    2. Verwenden Sie das Fenster Locals, um den Zustand der Objekte zu beobachten, die derzeit vom Befehlszeiger hervorgehoben sind.
    3. Fügen Sie dem Überwachungsfenster Variablen hinzu. Sie können den Status der überwachten Variablen während der gesamten Debugging-Sitzung beobachten, auch wenn sich die Variable nicht in der Codezeile befindet, die gerade durch den Befehlszeiger hervorgehoben wird.
    4. Wählen Sie im Menü Debuggen die Option Fortsetzen, um den Befehlszeiger zum nächsten Breakpoint zu bewegen oder die Ausführung der Routine abzuschließen, wenn es keine weiteren Breakpoints gibt.

Beispielcode

Das folgende Beispiel gibt die SQL Server-Version an den Aufrufer zurück.

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 Sie die im vorherigen Beispiel definierte gespeicherte Prozedur GetVersion aufrufen.

EXEC GetVersion  

Nächste Schritte

Weitere Informationen zum Debuggen des verwalteten Codes mit Visual Studio finden Sie unter Debugging des verwalteten Codes in der Visual Studio-Dokumentation.

Weitere Informationen finden Sie unter Programmierkonzepte zur Integration der Common Language Runtime