Fouten opsporen in CLR-databaseobjecten
van toepassing op:SQL Server-
SQL Server biedt ondersteuning voor foutopsporing Transact-SQL en CLR-objecten (Common Language Runtime) in de database. De belangrijkste aspecten van foutopsporing in SQL Server zijn het gemak van de installatie en het gebruik en de integratie van het SQL Server-foutopsporingsprogramma met het Foutopsporingsprogramma van Microsoft Visual Studio. Daarnaast werkt foutopsporing in verschillende talen. Gebruikers kunnen naadloos overstappen op CLR-objecten vanuit Transact-SQL en omgekeerd.
Het Transact-SQL foutopsporingsprogramma in SQL Server Management Studio kan niet worden gebruikt voor het opsporen van fouten in beheerde databaseobjecten, maar u kunt fouten in de objecten opsporen met behulp van de foutopsporingsprogramma's in Visual Studio. Foutopsporing van beheerde databaseobjecten in Visual Studio ondersteunt alle algemene functies voor foutopsporing, zoals stap in en stap over instructies binnen routines die worden uitgevoerd op de server. Foutopsporingsprogramma's kunnen onderbrekingspunten instellen, de aanroepstack inspecteren, variabelen inspecteren en variabelewaarden wijzigen tijdens foutopsporing.
Fouten opsporen in machtigingen en beperkingen
Foutopsporing is een bewerking met hoge bevoegdheden en daarom mogen alleen leden van de sysadmin vaste serverfunctie dit doen in SQL Server.
De volgende beperkingen zijn van toepassing tijdens foutopsporing:
Foutopsporing van CLR-routines is beperkt tot één foutopsporingsprogramma-exemplaar tegelijk. Deze beperking is van toepassing omdat alle uitvoering van CLR-code bevriest wanneer een onderbrekingspunt wordt bereikt en de uitvoering pas wordt voortgezet wanneer de debugger verdergaat vanaf het onderbrekingspunt. U kunt echter doorgaan met debuggen van Transact-SQL in andere verbindingen. Hoewel Transact-SQL debuggen geen andere uitvoeringen op de server blokkeert, kan het ervoor zorgen dat andere verbindingen moeten wachten doordat er een slot wordt vastgehouden.
Bestaande verbindingen kunnen niet worden opgespoord, alleen nieuwe verbindingen, omdat SQL Server informatie vereist over de client- en foutopsporingsprogrammaomgeving voordat de verbinding kan worden gemaakt.
Daarom raden we aan dat Transact-SQL- en CLR-code wordt opgespoord op een testserver en niet op een productieserver.
Overzicht
Foutopsporing in SQL Server volgt een model per verbinding. Een foutopsporingsprogramma kan activiteiten alleen detecteren en fouten opsporen in de clientverbinding waaraan deze wordt gekoppeld. Omdat de functionaliteit van het foutopsporingsprogramma niet wordt beperkt door het type verbinding, kunnen zowel gegevensstroom in tabelvorm (TDS) als HTTP-verbindingen worden opgespoord. SQL Server staat echter geen foutopsporing van bestaande verbindingen toe. Foutopsporing ondersteunt alle algemene functies voor foutopsporing binnen routines die worden uitgevoerd op de server. De interactie tussen een foutopsporingsprogramma en SQL Server vindt plaats via com (distributed Component Object Model).
Zie voor meer informatie en scenario's over foutopsporing van beheerde opgeslagen procedures, functies, triggers, door de gebruiker gedefinieerde typen en aggregaties SQL Server CLR Integration Database Debugging in de Documentatie van Visual Studio.
Het TCP/IP-netwerkprotocol moet zijn ingeschakeld op het SQL Server-exemplaar om Visual Studio te kunnen gebruiken voor externe ontwikkeling, foutopsporing en ontwikkeling. Zie Clientprotocollen configurerenvoor meer informatie over het inschakelen van TCP/IP-protocol op de server.
Stappen voor foutopsporing
Gebruik de volgende stappen om fouten op te sporen in een CLR-databaseobject in Microsoft Visual Studio:
Open Microsoft Visual Studio en maak een nieuw SQL Server-project. U kunt het SQL LocalDB-exemplaar gebruiken dat wordt geleverd met Visual Studio.
Maak een nieuw SQL CLR-type (C#):
- Klik in Solution Explorermet de rechtermuisknop op het project en selecteer Toevoegen, Nieuw item....
- Selecteer in het venster Add New Item een van de volgende opties: SQL CLR C# Stored Procedure, SQL CLR C# User-Defined Function, SQL CLR C# User-Defined Type, SQL CLR C# Trigger, SQL CLR C# Aggregateof Class.
- Geef een naam op voor het bronbestand van het nieuwe type en selecteer vervolgens Toevoegen.
Voeg code voor het nieuwe type toe aan de teksteditor. Zie de volgende sectie in dit artikel voor voorbeeldcode voor een voorbeeld van een opgeslagen procedure.
Voeg een script toe waarmee het type wordt getest:
- Klik in Solution Explorermet de rechtermuisknop op het projectknooppunt en selecteer Toevoegen, Script....
- Selecteer in het venster Nieuw item toevoegenScript (niet in build)en geef een naam op, zoals
Test.sql
. Selecteer de knop Toevoegen. - Dubbelklik in Solution Explorer-op het knooppunt
Test.sql
om het bronbestand voor het testscript te openen. - Voeg het testscript (een script dat de code aanroept om fouten op te sporen) toe aan de teksteditor. Zie het voorbeeld in de volgende sectie voor een voorbeeldscript.
Plaats een of meer onderbrekingspunten in de broncode. Klik met de rechtermuisknop op een coderegel in de teksteditor van de functie of routine die u wilt opsporen. Selecteer onderbrekingspunt, Onderbrekingspunt invoegen. Het onderbrekingspunt wordt toegevoegd, waarbij de coderegel rood wordt gemarkeerd.
Selecteer in het menu FoutopsporingStart Debugging om het project te compileren, implementeren en testen. Het testscript in
Test.sql
wordt uitgevoerd en het beheerde databaseobject wordt aangeroepen.Wanneer de gele pijl (het aanwijzen van de instructieaanwijzer) wordt weergegeven op het onderbrekingspunt, wordt de uitvoering van de code onderbroken. Vervolgens kunt u fouten opsporen in uw beheerde databaseobject:
- Gebruik Step Over in het menu Debug om de instructiepijl naar de volgende regel code te springen.
- Gebruik het venster Locals om de status van de objecten te bekijken die momenteel door de instructiepointer zijn gemarkeerd.
- Voeg variabelen toe aan het venster Watch. U kunt de status van gevolgde variabelen tijdens de foutopsporingssessie bekijken, zelfs wanneer de variabele zich niet op de coderegel bevindt die momenteel is gemarkeerd door de instructieaanwijzer.
- Selecteer Doorgaan in het menu Foutopsporing om de instructieaanwijzer naar het volgende breekpunt te verplaatsen of om de uitvoering van de routine te voltooien als er geen breekpunten meer zijn.
Voorbeeldcode
In het volgende C#-voorbeeld wordt de SQL Server-versie geretourneerd naar de aanroeper.
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);
}
}
}
Voorbeeld van testscript
Het volgende testscript laat zien hoe u de GetVersion
opgeslagen procedure aanroept die in het vorige voorbeeld is gedefinieerd.
EXECUTE GetVersion;