Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
door Scott Mitchell
Met de edities Visual Studio Professional en Team System kunt u breakpoints en stap inzetten voor opgeslagen procedures in SQL Server, waardoor het debuggen van opgeslagen procedures net zo eenvoudig is als het debuggen van toepassingscode. In deze zelfstudie ziet u hoe direct database-foutopsporing en toepassingsopsporing van opgeslagen procedures worden uitgevoerd.
Introductie
Visual Studio biedt een uitgebreide foutopsporingservaring. Met een paar toetsaanslagen of muisklikken kunt u onderbrekingspunten gebruiken om de uitvoering van een programma te stoppen en de status en controlestroom ervan te onderzoeken. Naast de foutopsporing van toepassingscode biedt Visual Studio ondersteuning voor het opsporen van fouten in opgeslagen procedures vanuit SQL Server. Net zoals je onderbrekingspunten kunt instellen in de code van een ASP.NET code-behind-klasse of een Business Logic Layer-klasse, kun je ze ook binnen opgeslagen procedures plaatsen.
In deze zelfstudie gaan we kijken naar opgeslagen procedures van Server Explorer in Visual Studio en hoe u onderbrekingspunten kunt instellen die worden bereikt wanneer de opgeslagen procedure wordt aangeroepen vanuit de actieve ASP.NET-toepassing.
Opmerking
Helaas kunnen opgeslagen procedures alleen worden doorlopen en kunnen fouten worden opgespoord in de Professional- en Team System-versies van Visual Studio. Als u Visual Web Developer of de standaardversie van Visual Studio gebruikt, kunt u dit lezen terwijl we de stappen doorlopen die nodig zijn voor het opsporen van fouten in opgeslagen procedures, maar u kunt deze stappen niet repliceren op uw computer.
SQL Server-debuggingconcepten
Microsoft SQL Server 2005 is ontworpen om integratie te bieden met de Common Language Runtime (CLR), de runtime die wordt gebruikt door alle .NET-assembly's. Daarom ondersteunt SQL Server 2005 beheerde databaseobjecten. Dat wil gezegd, u kunt databaseobjecten zoals opgeslagen procedures en User-Defined Functions (UDF's) maken als methoden in een C#-klasse. Hierdoor kunnen deze opgeslagen procedures en UDF's gebruikmaken van functionaliteit in .NET Framework en vanuit uw eigen aangepaste klassen. SQL Server 2005 biedt natuurlijk ook ondersteuning voor T-SQL-databaseobjecten.
SQL Server 2005 biedt ondersteuning voor foutopsporing voor zowel T-SQL- als beheerde databaseobjecten. Deze objecten kunnen echter alleen worden gedebugged via Visual Studio 2005 Professional en Team Systems-edities. In deze zelfstudie onderzoeken we de foutopsporing van T-SQL-databaseobjecten. In de volgende zelfstudie wordt gekeken naar foutopsporing van beheerde databaseobjecten.
Het overzicht van T-SQL- en CLR-foutopsporing in SQL Server 2005-blogbericht van het SQL Server 2005 CLR-integratieteam markeert de drie manieren om fouten op te sporen in SQL Server 2005-objecten vanuit Visual Studio:
- Direct Database Debugging (DDD): vanuit Server Explorer kunnen we elk T-SQL-databaseobject, zoals opgeslagen procedures en UDF's, betreden. We onderzoeken DDD in stap 1.
- Toepassingsopsporing : we kunnen onderbrekingspunten instellen binnen een databaseobject en vervolgens onze ASP.NET toepassing uitvoeren. Wanneer het databaseobject wordt uitgevoerd, wordt het onderbrekingspunt bereikt en wordt de controle overgedragen aan de debugger. Houd er rekening mee dat we met foutopsporing van toepassingen niet vanuit toepassingscode kunnen overstappen op een databaseobject. We moeten breekpunten expliciet instellen in die opgeslagen procedures of UDF's waar we de debugger willen stoppen. Toepassingsopsporing wordt onderzocht vanaf stap 2.
- Foutopsporing vanuit een SQL Server-project - Visual Studio Professional en Team Systems-edities bevatten een SQL Server-projecttype dat vaak wordt gebruikt voor het maken van beheerde databaseobjecten. We onderzoeken het gebruik van SQL Server Projects en het opsporen van fouten in de inhoud ervan in de volgende zelfstudie.
Visual Studio kan fouten opsporen in opgeslagen procedures op lokale en externe SQL Server-exemplaren. Een lokaal SQL Server-exemplaar is een exemplaar dat is geïnstalleerd op dezelfde computer als Visual Studio. Als de SQL Server-database die u gebruikt zich niet op uw ontwikkelcomputer bevindt, wordt deze beschouwd als een extern exemplaar. Voor deze zelfstudies gebruiken we lokale SQL Server-exemplaren. Voor het opsporen van fouten in opgeslagen procedures op een extern SQL Server-exemplaar zijn meer configuratiestappen vereist dan bij het opsporen van fouten in opgeslagen procedures op een lokaal exemplaar.
Als u een lokaal SQL Server-exemplaar gebruikt, kunt u beginnen met stap 1 en deze zelfstudie tot het einde doorlopen. Als u een extern SQL Server-exemplaar gebruikt, moet u er eerst voor zorgen dat u tijdens het debuggen op uw ontwikkelcomputer bent ingelogd met een Windows-gebruikersaccount dat toegang heeft tot het externe SQL Server-exemplaar. Bovendien moeten zowel deze databaseaanmelding als de databaseaanmelding die wordt gebruikt om verbinding te maken met de database vanuit de actieve ASP.NET-toepassing lid zijn van de sysadmin rol. Zie de sectie 'Debugging van T-SQL database-objecten op externe instanties' aan het einde van deze handleiding voor meer informatie over het configureren van Visual Studio en SQL Server voor het debuggen van een externe instantie.
Ten slotte begrijpt u dat foutopsporingsondersteuning voor T-SQL-databaseobjecten niet zo uitgebreid is als ondersteuning voor foutopsporing voor .NET-toepassingen. De voorwaarden en filters voor onderbrekingspunten worden bijvoorbeeld niet ondersteund, alleen een subset van de foutopsporingsvensters zijn beschikbaar, u kunt Bewerken en Doorgaan niet gebruiken, het venster Direct wordt nutteloos weergegeven, enzovoort. Zie beperkingen voor opdrachten en onderdelen voor foutopsporingsprogramma's voor meer informatie.
Stap 1: Rechtstreeks in een opgeslagen procedure stappen
Visual Studio maakt het eenvoudig om rechtstreeks fouten op te sporen in een databaseobject. Laten we eens kijken hoe u de functie Directe Database Debugging (DDD) gebruikt om de opgeslagen procedure in de Northwind-database in te stappen. Zoals de naam al aangeeft, retourneert Products_SelectByCategoryID productinformatie voor een bepaalde categorie; het is gemaakt in de tutorial Bestaande opgeslagen procedures gebruiken voor de Getypte DataSet s TableAdapters. Ga eerst naar Server Explorer en vouw het knooppunt Northwind-database uit. Zoom vervolgens in op de map Opgeslagen procedures, klik met de rechtermuisknop op de Products_SelectByCategoryID opgeslagen procedure en kies de optie Stap in opgeslagen procedure in het contextmenu. Hiermee start u het foutopsporingsprogramma.
Omdat in de Products_SelectByCategoryID opgeslagen procedure een @CategoryID invoerparameter wordt verwacht, wordt u gevraagd deze waarde op te geven. Voer 1 in, waarmee informatie over de dranken wordt weergegeven.
@CategoryID Parameter" />
Afbeelding 1: Gebruik de waarde 1 voor de @CategoryID parameter
Nadat de waarde voor de @CategoryID parameter is opgegeven, wordt de opgeslagen procedure uitgevoerd. In plaats van te worden uitgevoerd tot voltooiing, stopt het foutopsporingsprogramma de uitvoering van de eerste instructie. Let op de gele pijl in de marge, die de huidige locatie in de opgeslagen procedure aangeeft. U kunt parameterwaarden bekijken en bewerken via het Bekervenster of door met de muisaanwijzer over de parameternaam in de opgeslagen procedure te bewegen.
Afbeelding 2: Het foutopsporingsprogramma is gestopt op de eerste instructie van de opgeslagen procedure (klik om de volledige afbeelding weer te geven)
Als u de opgeslagen procedure één voor één instructie wilt doorlopen, klikt u op de knop Stap over in de werkbalk of drukt u op de toets F10. De Products_SelectByCategoryID opgeslagen procedure bevat één SELECT instructie, dus als u op F10 drukt, gaat u over de enkele instructie en voltooit u de uitvoering van de opgeslagen procedure. Nadat de opgeslagen procedure is voltooid, wordt de uitvoer weergegeven in het venster Uitvoer en wordt het foutopsporingsprogramma beëindigd.
Opmerking
T-SQL-foutopsporing vindt plaats op instructieniveau; u kunt niet navigeren in een SELECT instructie.
Stap 2: de website voor foutopsporing voor toepassingen configureren
Hoewel het opsporen van fouten in een opgeslagen procedure rechtstreeks vanuit Server Explorer handig is, zijn we in veel scenario's meer geïnteresseerd in het opsporen van fouten in de opgeslagen procedure wanneer deze wordt aangeroepen vanuit onze ASP.NET toepassing. We kunnen onderbrekingspunten toevoegen aan een opgeslagen procedure vanuit Visual Studio en vervolgens beginnen met het opsporen van fouten in de ASP.NET toepassing. Wanneer een opgeslagen procedure met onderbrekingspunten wordt aangeroepen vanuit de toepassing, stopt de uitvoering op het onderbrekingspunt en kunnen we de parameterwaarden van de opgeslagen procedure bekijken en wijzigen en de instructies doorlopen, net zoals in stap 1.
Voordat we kunnen beginnen met het opsporen van fouten in opgeslagen procedures die vanuit de toepassing worden aangeroepen, moeten we de ASP.NET-webtoepassing instrueren om te integreren met het SQL Server-foutopsporingsprogramma. Klik eerst met de rechtermuisknop op de naam van de website in Solution Explorer (ASPNET_Data_Tutorial_74_CS). Kies de optie Eigenschappenpagina's in het contextmenu, selecteer het item Startopties aan de linkerkant en schakel het selectievakje SQL Server in de sectie Foutopsporingsprogramma's in (zie afbeelding 3).
Afbeelding 3: Schakel het selectievakje SQL Server in op de eigenschappenpagina's van de toepassing (klik hier om de volledige afbeelding weer te geven)
Daarnaast moeten we de databaseverbindingsreeks bijwerken die door de toepassing wordt gebruikt, zodat groepsgewijze verbindingen worden uitgeschakeld. Wanneer een verbinding met een database wordt gesloten, wordt het bijbehorende SqlConnection object in een groep beschikbare verbindingen geplaatst. Wanneer u een verbinding met een database tot stand brengt, kan een beschikbaar verbindingsobject worden opgehaald uit deze pool in plaats van een nieuwe verbinding te maken en tot stand te brengen. Deze pooling van verbindingsobjecten is een prestatieverbetering en is standaard ingeschakeld. Bij foutopsporing willen we echter groepsgewijze verbindingen uitschakelen omdat de infrastructuur voor foutopsporing niet correct is hersteld bij het werken met een verbinding die uit de pool is genomen.
Om connection pooling uit te schakelen, werkt u de NORTHWNDConnectionString bij in Web.config zodat het de instelling Pooling=false bevat.
<connectionStrings>
<add name="NORTHWNDConnectionString" connectionString=
"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NORTHWND.MDF;
Integrated Security=True;User Instance=True;Pooling=false"
providerName="System.Data.SqlClient" />
</connectionStrings>
Opmerking
Zodra u klaar bent met het opsporen van fouten in SQL Server via de ASP.NET-toepassing, moet u de groepsgewijze verbinding opnieuw instellen door de instelling uit de Pooling verbindingsreeks te verwijderen (of door deze in te stellen op Pooling=true ).
Op dit moment is de ASP.NET-toepassing zo geconfigureerd dat Visual Studio fouten kan opsporen in SQL Server-databaseobjecten wanneer deze wordt aangeroepen via de webtoepassing. U hoeft nu alleen maar een onderbrekingspunt toe te voegen aan een opgeslagen procedure en foutopsporing te starten.
Stap 3: Een onderbrekingspunt en foutopsporing toevoegen
Open de Products_SelectByCategoryID opgeslagen procedure en stel een onderbrekingspunt in aan het begin van de SELECT instructie door op de gewenste plaats in de marge te klikken of door de cursor aan het begin van de SELECT instructie te plaatsen en op F9 te drukken. Zoals in afbeelding 4 wordt geïllustreerd, wordt het onderbrekingspunt weergegeven als een rode cirkel in de marge.
Afbeelding 4: Een onderbrekingspunt instellen in de Products_SelectByCategoryID opgeslagen procedure (klik om de afbeelding op volledige grootte weer te geven)
Om fouten in een SQL-databaseobject te kunnen opsporen via een clienttoepassing, is het noodzakelijk dat de database wordt geconfigureerd voor het ondersteunen van foutopsporing van toepassingen. Wanneer u een onderbrekingspunt voor het eerst instelt, moet deze instelling automatisch worden ingeschakeld, maar het is verstandig om dit te controleren. Klik met de rechtermuisknop op het NORTHWND.MDF knooppunt in Server Explorer. Het contextmenu moet een ingeschakeld menu-item bevatten met de naam Toepassingsfoutopsporing.
Afbeelding 5: Zorg ervoor dat de optie toepassingsopsporing is ingeschakeld
Nu de onderbrekingspuntset en de optie Toepassingsopsporing zijn ingeschakeld, zijn we klaar om fouten op te sporen in de opgeslagen procedure wanneer deze wordt aangeroepen vanuit de ASP.NET-toepassing. Start de debugger door naar het menu Foutopsporing te gaan en Start Foutopsporing te kiezen, door op F5 te drukken of op het groene afspeelpictogram in de werkbalk te klikken. Hiermee start u het foutopsporingsprogramma en start u de website.
De Products_SelectByCategoryID opgeslagen procedure is gemaakt in de zelfstudie Bestaande opgeslagen procedures gebruiken voor de TableAdapters van de Getypte DataSet. De bijbehorende webpagina (~/AdvancedDAL/ExistingSprocs.aspx) bevat een GridView die de resultaten weergeeft die door deze opgeslagen procedure worden geretourneerd. Ga naar deze pagina via de browser. Wanneer u de pagina bereikt, wordt het onderbrekingspunt in de Products_SelectByCategoryID opgeslagen procedure bereikt en wordt het besturingselement geretourneerd naar Visual Studio. Net als in stap 1 kunt u de instructies van de opgeslagen procedure doorlopen en de parameterwaarden weergeven en wijzigen.
Afbeelding 6: Op de ExistingSprocs.aspx pagina worden de dranken in eerste instantie weergegeven (klik om de afbeelding op volledige grootte weer te geven)
Afbeelding 7: Het onderbrekingspunt van de opgeslagen procedure is bereikt (klik om de afbeelding op volledige grootte weer te geven)
Zoals in het Waarschuwingsvenster in afbeelding 7 wordt weergegeven, is de waarde van de @CategoryID-parameter 1. Dit komt doordat op de ExistingSprocs.aspx pagina in eerste instantie producten worden weergegeven in de categorie Dranken, die de CategoryID waarde 1 heeft. Kies een andere categorie in de vervolgkeuzelijst. Als u dit doet, resulteert dit in een postback en wordt de opgeslagen procedure Products_SelectByCategoryID opnieuw uitgevoerd. Het onderbrekingspunt wordt opnieuw bereikt, maar deze keer weerspiegelt de waarde van de @CategoryID parameter de geselecteerde vervolgkeuzelijstitem s CategoryID.
Afbeelding 8: Kies een andere categorie in de Drop-Down lijst (klik om de afbeelding op volledige grootte weer te geven)
@CategoryID parameter geeft de categorie weer die is geselecteerd op de webpagina" />
Afbeelding 9: De @CategoryID parameter geeft de categorie weer die is geselecteerd op de webpagina (klik om de afbeelding op volledige grootte weer te geven)
Opmerking
Als het onderbrekingspunt in de Products_SelectByCategoryID opgeslagen procedure niet wordt bereikt bij het bezoeken van de ExistingSprocs.aspx pagina, controleert u of het selectievakje SQL Server is ingeschakeld in de sectie Foutopsporingsprogramma's van de eigenschappenpagina van de ASP.NET-toepassing, dat groepsgewijze verbindingen is uitgeschakeld en of de optie toepassingsopsporing voor de database is ingeschakeld. Als u nog steeds problemen ondervindt, start u Visual Studio opnieuw en probeert u het opnieuw.
Debuggen van T-SQL Database-objecten op externe instanties
Het opsporen van fouten in databaseobjecten via Visual Studio is vrij eenvoudig wanneer het SQL Server-database-exemplaar zich op dezelfde computer bevindt als Visual Studio. Als SQL Server en Visual Studio zich echter op verschillende computers bevinden, is er een zorgvuldige configuratie vereist om alles goed te laten werken. Er zijn twee kerntaken waarmee we te maken hebben:
- Zorg ervoor dat de aanmelding die wordt gebruikt om verbinding te maken met de database via ADO.NET deel uitmaakt van de
sysadminrol. - Zorg ervoor dat het Windows-gebruikersaccount dat wordt gebruikt door Visual Studio op de ontwikkelcomputer een geldig SQL Server-aanmeldingsaccount is dat deel uitmaakt van de
sysadminrol.
De eerste stap is relatief eenvoudig. Identificeer eerst het gebruikersaccount dat is gebruikt om verbinding te maken met de database vanuit de ASP.NET toepassing en voeg vervolgens vanuit SQL Server Management Studio dat aanmeldingsaccount toe aan de sysadmin rol.
Voor de tweede taak moet het Windows-gebruikersaccount dat u gebruikt voor het opsporen van fouten in de toepassing een geldige aanmelding op de externe database zijn. De kans is echter groot dat het Windows-account waarmee u bent aangemeld bij uw werkstation, geen geldige aanmelding op SQL Server is. In plaats van uw specifieke aanmeldingsaccount toe te voegen aan SQL Server, is het beter om een Windows-gebruikersaccount aan te wijzen als het SQL Server-foutopsporingsaccount. Als u vervolgens fouten wilt opsporen in de databaseobjecten van een extern SQL Server-exemplaar, voert u Visual Studio uit met behulp van de referenties van het Windows-aanmeldingsaccount.
Een voorbeeld moet helpen bij het verduidelijken van dingen. Stel dat er een Windows-account is met de naam SQLDebug binnen het Windows-domein. Dit account moet worden toegevoegd aan het externe SQL Server-exemplaar als geldige aanmelding en als lid van de sysadmin rol. Als u vervolgens fouten wilt opsporen in het externe SQL Server-exemplaar vanuit Visual Studio, moet u Visual Studio uitvoeren als de SQLDebug gebruiker. Dit kan worden gedaan door ons af te melden bij ons werkstation, weer in te loggen als SQLDebug, en vervolgens Visual Studio te starten. Een eenvoudigere benadering is echter om in te loggen bij ons werkstation met onze eigen referenties en daarna runas.exe te gebruiken om Visual Studio als de gebruiker SQLDebug te starten.
runas.exe staat toe dat een bepaalde toepassing wordt uitgevoerd onder het kader van een ander gebruikersaccount. Als u Visual Studio als SQLDebugwilt starten, kunt u de volgende instructie invoeren op de opdrachtregel:
runas.exe /user:SQLDebug "%PROGRAMFILES%\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"
Zie William R. Vaughn'sHitchhiker's Guide to Visual Studio and SQL Server, Seventh Edition voor een gedetailleerdere uitleg over dit proces.
Opmerking
Als op uw ontwikkelcomputer Windows XP Service Pack 2 wordt uitgevoerd, moet u de firewall voor internetverbinding configureren om externe foutopsporing toe te staan. In het artikel Instructies: SQL Server 2005-foutopsporing inschakelen, wordt uitgelegd dat dit twee stappen omvat: (a) Op de Visual Studio-hostcomputer moet u toevoegen Devenv.exe aan de lijst Uitzonderingen en de TCP 135-poort openen. (b) Op de externe (SQL)-computer moet u de TCP 135-poort openen en toevoegen sqlservr.exe aan de lijst uitzonderingen. Als voor uw domeinbeleid netwerkcommunicatie via IPSec moet worden uitgevoerd, moet u de UDP 4500- en UDP 500-poorten openen.
Samenvatting
Naast het bieden van ondersteuning voor foutopsporing voor .NET-toepassingscode biedt Visual Studio ook diverse opties voor foutopsporing voor SQL Server 2005. In deze zelfstudie hebben we twee van deze opties bekeken: Direct Database-foutopsporing en toepassingsopsporing. Als u rechtstreeks fouten wilt opsporen in een T-SQL-databaseobject, zoekt u het object via Server Explorer en klikt u erop met de rechtermuisknop en kiest u Stap in. Hiermee start u het foutopsporingsprogramma en stopt u met de eerste instructie in het databaseobject. Op dat moment kunt u de instructies van het object doorlopen en parameterwaarden weergeven en wijzigen. In stap 1 hebben we deze aanpak gebruikt om naar de Products_SelectByCategoryID opgeslagen procedure te gaan.
Met foutopsporing van toepassingen kunnen onderbrekingspunten rechtstreeks in de databaseobjecten worden ingesteld. Wanneer een databaseobject met onderbrekingspunten wordt aangeroepen vanuit een clienttoepassing (zoals een ASP.NET-webtoepassing), stopt het programma wanneer het foutopsporingsprogramma het overneemt. Toepassingsopsporing is handig omdat deze duidelijker laat zien welke toepassingsactie ervoor zorgt dat een bepaald databaseobject wordt aangeroepen. Er is echter iets meer configuratie en installatie vereist dan Direct Database-foutopsporing.
Databaseobjecten kunnen ook worden gedebugged via SQL Server Projects. In de volgende zelfstudie wordt gekeken naar het gebruik van SQL Server Projects en hoe u deze kunt gebruiken om beheerde databaseobjecten te maken en er fouten in op te sporen.
Veel plezier met programmeren!
Over de auteur
Scott Mitchell, auteur van zeven ASP/ASP.NET-boeken en oprichter van 4GuysFromRolla.com, werkt sinds 1998 met Microsoft-webtechnologieën. Scott werkt als onafhankelijk consultant, trainer en schrijver. Zijn laatste boek is Sams Teach Yourself ASP.NET 2.0 in 24 uur. Hij kan worden bereikt op mitchell@4GuysFromRolla.com.