Ladění uložených procedur (VB)
Edice Visual Studio Professional a Team System umožňují nastavit zarážky a krokovat uložené procedury v rámci SQL Server, takže ladění uložených procedur je stejně snadné jako ladění kódu aplikace. Tento kurz ukazuje přímé ladění databází a ladění aplikací uložených procedur.
Úvod
Visual Studio nabízí bohaté možnosti ladění. Pomocí několika stisknutí kláves nebo kliknutí myši je možné pomocí zarážek zastavit provádění programu a prozkoumat jeho stav a tok řízení. Sada Visual Studio nabízí spolu s laděním kódu aplikace podporu ladění uložených procedur z SQL Server. Stejně jako zarážky mohou být nastaveny v kódu ASP.NET třídy kódu na pozadí nebo třídy vrstvy obchodní logiky, stejně jako mohou být umístěny v rámci uložených procedur.
V tomto kurzu se podíváme na krokování do uložených procedur z Průzkumníka serveru v sadě Visual Studio a také na to, jak nastavit zarážky, které jsou při volání uložené procedury ze spuštěné aplikace ASP.NET.
Poznámka
Uložené procedury je bohužel možné procházet a ladit pouze prostřednictvím verzí Professional a Team Systems sady Visual Studio. Pokud používáte Visual Web Developer nebo standardní verzi sady Visual Studio, můžete si projít kroky potřebné k ladění uložených procedur, ale tyto kroky nebudete moct na svém počítači replikovat.
koncepty ladění SQL Server
Microsoft SQL Server 2005 byl navržen tak, aby poskytoval integraci s modulem CLR (Common Language Runtime), což je modul runtime používaný všemi sestaveními .NET. V důsledku toho SQL Server 2005 podporuje spravované databázové objekty. To znamená, že můžete vytvořit databázové objekty, jako jsou uložené procedury a funkce User-Defined (UDF) jako metody ve třídě jazyka Visual Basic. To umožňuje těmto uloženým procedurám a funkcím definovaným uživatelem využívat funkce v rozhraní .NET Framework a z vlastních tříd. SQL Server 2005 samozřejmě také poskytuje podporu databázových objektů T-SQL.
SQL Server 2005 nabízí podporu ladění pro objekty T-SQL i spravované databázové objekty. Tyto objekty však lze ladit pouze prostřednictvím edic Visual Studio 2005 Professional a Team Systems. V tomto kurzu prozkoumáme ladění databázových objektů T-SQL. Následující kurz se zabývá laděním spravovaných databázových objektů.
Položka blogu Přehled ladění T-SQL a CLR v SQL Server 2005 od týmu SQL Server 2005 CLR Integration zvýrazňuje tři způsoby ladění objektů SQL Server 2005 ze sady Visual Studio:
- Přímé ladění databáze (DDD) – z Průzkumníka serveru můžeme krokovat do libovolného databázového objektu T-SQL, jako jsou uložené procedury a funkce definované uživatelem. DDD prozkoumáme v kroku 1.
- Ladění aplikací – můžeme nastavit zarážky v rámci databázového objektu a pak spustit ASP.NET aplikaci. Při spuštění databázového objektu bude zarážka nalezena a řízení bude převedeno do ladicího programu. Všimněte si, že při ladění aplikace nemůžeme z kódu aplikace krokovat do databázového objektu. Musíme explicitně nastavit zarážky v těch uložených procedurách nebo uživatelem definovaných funkcích, kde chceme, aby se ladicí program zastavil. Ladění aplikace se zkoumá od kroku 2.
- Ladění z projektu SQL Server – edice Visual Studio Professional a Team Systems obsahují typ projektu SQL Server, který se běžně používá k vytváření spravovaných databázových objektů. Použití projektů SQL Server a ladění jejich obsahu prozkoumáme v dalším kurzu.
Visual Studio může ladit uložené procedury v místních a vzdálených instancích SQL Server. Místní instance SQL Server je instance, která je nainstalovaná na stejném počítači jako Visual Studio. Pokud se SQL Server databáze, kterou používáte, nenachází na vývojovém počítači, považuje se za vzdálenou instanci. V těchto kurzech jsme používali místní instance SQL Server. Ladění uložených procedur na vzdálené instanci SQL Serveru vyžaduje více kroků konfigurace než při ladění uložených procedur v místní instanci.
Pokud používáte místní instanci SQL Server, můžete začít krokem 1 a projít si tento kurz až do konce. Pokud ale používáte vzdálenou instanci SQL Server, musíte se nejprve ujistit, že při ladění budete k vývojovému počítači přihlášeni pomocí uživatelského účtu systému Windows, který má SQL Server přihlášení ke vzdálené instanci. Kromě toho musí být členy sysadmin
této role jak toto přihlášení k databázi, tak i přihlášení k databázi použité pro připojení k databázi ze spuštěné aplikace ASP.NET. Další informace o konfiguraci sady Visual Studio a SQL Server pro ladění vzdálené instance najdete v části Ladění objektů T-SQL Database ve vzdálených instancích na konci tohoto kurzu.
Nakonec si uvědomte, že podpora ladění pro databázové objekty T-SQL není tak bohatá na funkce jako podpora ladění pro aplikace .NET. Například podmínky zarážky a filtry nejsou podporované, k dispozici je jenom podmnožina oken ladění, nemůžete použít příkaz Upravit a pokračovat, okamžité okno se vykreslí jako nepoužitelné a tak dále. Další informace najdete v tématu Omezení příkazů a funkcí ladicího programu .
Krok 1: Přímý krok do uložené procedury
Visual Studio usnadňuje přímé ladění databázového objektu. Podívejme se na to, jak použít funkci DDD (Direct Database Debugging) k krokování do Products_SelectByCategoryID
uložené procedury v databázi Northwind. Jak už název napovídá, Products_SelectByCategoryID
vrací informace o produktu pro konkrétní kategorii. Byl vytvořen v kurzu Using Existing Stored Procedures (Použití existujících uložených procedur) pro typovou sadu dat s objekty TableAdapter . Začněte tím, že přejdete do Průzkumníka serveru a rozbalíte uzel databáze Northwind. Dále přejděte k podrobnostem do složky Uložené procedury, klikněte pravým tlačítkem na uloženou proceduru Products_SelectByCategoryID
a v místní nabídce vyberte možnost Krokovat do uložené procedury. Tím se spustí ladicí program.
Vzhledem k tomu, že uložená Products_SelectByCategoryID
procedura očekává @CategoryID
vstupní parametr, jsme požádáni o zadání této hodnoty. Zadejte 1, která vrátí informace o nápojích.
@CategoryID Parameter" />
Obrázek 1: Použití hodnoty 1 parametru @CategoryID
Po zadání hodnoty parametru @CategoryID
se spustí uložená procedura. Ladicí program ale neskončí až do dokončení, ale zastaví provádění při prvním příkazu. Všimněte si žluté šipky na okraji, která označuje aktuální umístění v uložené proceduře. Hodnoty parametrů můžete zobrazit a upravit prostřednictvím okna Kukátko nebo tak, že najedete myší na název parametru v uložené proceduře.
Obrázek 2: Ladicí program se zastavil u prvního příkazu uložené procedury (kliknutím zobrazíte obrázek v plné velikosti)
Pokud chcete procházet uloženou proceduru po jednotlivých příkazech, klikněte na tlačítko Krokovat přes na panelu nástrojů nebo stiskněte klávesu F10. Uložená procedura Products_SelectByCategoryID
obsahuje jeden SELECT
příkaz, takže stisknutím klávesy F10 přejdete přes jeden příkaz a dokončíte provádění uložené procedury. Po dokončení uložené procedury se její výstup zobrazí v okně Výstup a ladicí program se ukončí.
Poznámka
Ladění T-SQL probíhá na úrovni příkazu; nemůžete vkrokovat SELECT
do příkazu.
Krok 2: Konfigurace webu pro ladění aplikací
I když je ladění uložené procedury přímo z Průzkumníka serveru užitečné, v mnoha scénářích se více zajímáme o ladění uložené procedury, když je volána z naší ASP.NET aplikace. Ze sady Visual Studio můžeme do uložené procedury přidat zarážky a pak spustit ladění ASP.NET aplikace. Když se z aplikace vyvolá uložená procedura se zarážkou, provádění se zastaví na zarážce a můžeme zobrazit a změnit hodnoty parametrů uložené procedury a procházet její příkazy stejně jako v kroku 1.
Než začneme s laděním uložených procedur volanými z aplikace, musíme dát ASP.NET webové aplikaci pokyn, aby se integroval s SQL Server ladicí program. Začněte kliknutím pravým tlačítkem na název webu v Průzkumník řešení (ASPNET_Data_Tutorial_74_VB
). V místní nabídce zvolte možnost Stránky vlastností, na levé straně vyberte položku Možnosti spuštění a zaškrtněte políčko SQL Server v části Ladicí programy (viz obrázek 3).
Obrázek 3: Zaškrtněte políčko SQL Server na stránkách vlastností aplikace (kliknutím zobrazíte obrázek v plné velikosti).
Kromě toho musíme aktualizovat databázové připojovací řetězec používané aplikací, aby bylo sdružování připojení zakázáno. Po ukončení připojení k databázi se odpovídající SqlConnection
objekt umístí do fondu dostupných připojení. Při navazování připojení k databázi je možné z tohoto fondu načíst dostupný objekt připojení, aniž by bylo nutné vytvářet a navazovat nové připojení. Toto sdružování objektů připojení představuje vylepšení výkonu a je ve výchozím nastavení povolené. Při ladění ale chceme sdružování připojení vypnout, protože při práci s připojením, které bylo převzato z fondu, není správně obnovena infrastruktura ladění.
Pokud chcete sdružování připojení zakázat, aktualizujte NORTHWNDConnectionString
v Web.config
souboru tak, aby obsahoval nastavení Pooling=false
.
<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>
Poznámka
Po dokončení ladění SQL Server prostřednictvím aplikace ASP.NET nezapomeňte obnovit sdružování připojení odebráním Pooling
nastavení z připojovací řetězec (nebo nastavením na Pooling=true
).
V tomto okamžiku byla aplikace ASP.NET nakonfigurována tak, aby umožňovala sadě Visual Studio ladit SQL Server databázové objekty při vyvolání prostřednictvím webové aplikace. Jediné, co teď zbývá, je přidat do uložené procedury zarážku a spustit ladění!
Krok 3: Přidání zarážky a ladění
Otevřete uloženou proceduru Products_SelectByCategoryID
a nastavte zarážku na začátku SELECT
příkazu kliknutím na okraj na příslušném místě nebo umístěním kurzoru na začátek SELECT
příkazu a stisknutím klávesy F9. Jak je znázorněno na obrázku 4, zarážka se zobrazí jako červené kolečko na okraji.
Obrázek 4: Nastavení zarážky v uložené proceduře Products_SelectByCategoryID
(kliknutím zobrazíte obrázek v plné velikosti)
Aby bylo možné objekt databáze SQL ladit prostřednictvím klientské aplikace, je nutné nakonfigurovat databázi tak, aby podporovala ladění aplikace. Při prvním nastavení zarážky by se toto nastavení mělo automaticky zapnout, ale je vhodné ji znovu zkontrolovat. V Průzkumníku NORTHWND.MDF
serveru klikněte pravým tlačítkem na uzel. Místní nabídka by měla obsahovat zaškrtnutou položku nabídky s názvem Ladění aplikace .
Obrázek 5: Ujistěte se, že je možnost Ladění aplikace povolená.
Když je zarážka nastavená a možnost Ladění aplikace povolená, jsme připraveni ladit uloženou proceduru při volání z ASP.NET aplikace. Spusťte ladicí program tak, že přejdete do nabídky Ladit a zvolíte Spustit ladění, stisknete klávesu F5 nebo kliknete na zelenou ikonu přehrávání na panelu nástrojů. Tím se spustí ladicí program a spustí se web.
Uložená Products_SelectByCategoryID
procedura byla vytvořena v kurzu Using Existing Stored Procedures (Použití existujících uložených procedur) pro typed DataSet s TableAdapter (Typová sada dat s objekty TableAdapter ). Odpovídající webová stránka (~/AdvancedDAL/ExistingSprocs.aspx
) obsahuje Objekt GridView, který zobrazuje výsledky vrácené touto uloženou procedurou. Přejděte na tuto stránku prostřednictvím prohlížeče. Po dosažení stránky se zarážka v uložené proceduře Products_SelectByCategoryID
zobrazí a řízení se vrátí do sady Visual Studio. Stejně jako v kroku 1 můžete procházet příkazy uložených procedur a zobrazit a upravit hodnoty parametrů.
Obrázek 6: Stránka ExistingSprocs.aspx
zpočátku zobrazuje nápoje (kliknutím zobrazíte obrázek v plné velikosti)
Obrázek 7: Byla dosažena zarážka uložené procedury (kliknutím zobrazíte obrázek v plné velikosti)
Jak ukazuje okno Kukátko na obrázku 7, hodnota parametru @CategoryID
je 1. Je to proto, že stránka ExistingSprocs.aspx
zpočátku zobrazuje produkty v kategorii nápoje, která má CategoryID
hodnotu 1. V rozevíracím seznamu vyberte jinou kategorii. To způsobí postback a znovu spustí uloženou proceduru Products_SelectByCategoryID
. Zarážka se znovu zobrazí, ale tentokrát @CategoryID
hodnota parametru odráží vybranou položku rozevíracího seznamu s CategoryID
.
Obrázek 8: Výběr jiné kategorie ze seznamu Drop-Down (kliknutím zobrazíte obrázek v plné velikosti)
@CategoryID odráží kategorii vybranou z webové stránky" />
Obrázek 9: Parametr @CategoryID
odráží kategorii vybranou z webové stránky (kliknutím zobrazíte obrázek v plné velikosti)
Poznámka
Pokud se při návštěvě ExistingSprocs.aspx
stránky nenarazí zarážka v Products_SelectByCategoryID
uložené proceduře, ujistěte se, že je v části Ladicí programy stránky vlastností ASP.NET aplikace zaškrtnuté políčko SQL Server, že bylo zakázáno sdružování připojení a zda je povolena možnost ladění aplikace databáze. Pokud potíže přetrvávají, restartujte sadu Visual Studio a zkuste to znovu.
Ladění objektů T-SQL Database ve vzdálených instancích
Ladění databázových objektů prostřednictvím sady Visual Studio je poměrně jednoduché, pokud je instance SQL Server databáze na stejném počítači jako sada Visual Studio. Pokud se ale SQL Server a Sada Visual Studio nacházejí na různých počítačích, je potřeba provést určitou pečlivou konfiguraci, aby vše fungovalo správně. Čelíme dvěma základním úkolům:
- Ujistěte se, že přihlášení použité pro připojení k databázi přes ADO.NET patří do role
sysadmin
. - Ujistěte se, že uživatelský účet systému Windows používaný sadou Visual Studio na vývojovém počítači je platným SQL Server přihlašovacím účtem, který patří do této
sysadmin
role.
První krok je poměrně jednoduchý. Nejprve identifikujte uživatelský účet použitý pro připojení k databázi z aplikace ASP.NET a pak z SQL Server Management Studio přidejte tento přihlašovací účet k sysadmin
roli.
Druhá úloha vyžaduje, aby uživatelský účet systému Windows, který používáte k ladění aplikace, byl platným přihlášením ke vzdálené databázi. Je však pravděpodobné, že účet systému Windows, který jste se přihlásili k pracovní stanici, není platným přihlášením na SQL Server. Místo přidání konkrétního přihlašovacího účtu do SQL Server by bylo lepší určit nějaký uživatelský účet systému Windows jako SQL Server účet ladění. Pak k ladění databázových objektů vzdálené instance SQL Server spusťte Visual Studio pomocí přihlašovacích údajů tohoto účtu windows.
Příklad by měl pomoct věci objasnit. Představte si, že v doméně Windows existuje účet Windows s názvem SQLDebug
. Tento účet je potřeba přidat do vzdálené instance SQL Server jako platné přihlášení a jako člena sysadmin
role. Pokud pak chcete ladit vzdálenou instanci SQL Server ze sady Visual Studio, museli bychom spustit sadu Visual Studio jako SQLDebug
uživatel. Můžete to udělat tak, že se odhlásíte z pracovní stanice, znovu se přihlásíte jako SQLDebug
a pak spustíte sadu Visual Studio, ale jednodušším řešením by bylo přihlásit se k pracovní stanici pomocí vlastních přihlašovacích údajů a pak pomocí příkazu runas.exe
spustit sadu Visual Studio jako SQLDebug
uživatel. runas.exe
umožňuje spuštění konkrétní aplikace pod maskou jiného uživatelského účtu. Pokud chcete sadu Visual Studio spustit jako SQLDebug
, můžete na příkazový řádek zadat následující příkaz:
runas.exe /user:SQLDebug "%PROGRAMFILES%\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"
Podrobnější vysvětlení tohoto procesu najdete v průvodci hitchhikerem od Williama R. Vaughnak sadě Visual Studio a SQL Server sedmé edice.
Poznámka
Pokud na vašem vývojovém počítači běží Windows XP Service Pack 2, budete muset nakonfigurovat bránu firewall připojení k Internetu tak, aby umožňovala vzdálené ladění. Článek Postupy: Povolení ladění SQL Server 2005 obsahuje dva kroky: (a) Na hostitelském počítači sady Visual Studio musíte přidat Devenv.exe
do seznamu Výjimky a otevřít port TCP 135 a (b) Na vzdáleném počítači (SQL) musíte otevřít port TCP 135 a přidat sqlservr.exe
ho do seznamu Výjimky. Pokud vaše zásady domény vyžadují síťovou komunikaci prostřednictvím protokolu IPSec, musíte otevřít porty UDP 4500 a UDP 500.
Souhrn
Kromě podpory ladění pro kód aplikace .NET nabízí Sada Visual Studio také řadu možností ladění pro SQL Server 2005. V tomto kurzu jsme se podívali na dvě z těchto možností: přímé ladění databáze a ladění aplikací. Pokud chcete objekt databáze T-SQL ladit přímo, vyhledejte ho prostřednictvím Průzkumníka serveru, klikněte na něj pravým tlačítkem a zvolte Krokovat. Tím se spustí ladicí program a zastaví se první příkaz v databázovém objektu. V tomto okamžiku můžete procházet příkazy objektu s a zobrazit a upravit hodnoty parametrů. V kroku 1 jsme tento přístup použili ke vstupu do Products_SelectByCategoryID
uložené procedury.
Ladění aplikací umožňuje nastavit zarážky přímo v databázových objektech. Když je databázový objekt se zarážkou vyvolán z klientské aplikace (například ASP.NET webové aplikace), program se zastaví, jakmile ladicí program převezme funkci. Ladění aplikace je užitečné, protože jasněji ukazuje, jaká akce aplikace způsobuje vyvolání konkrétního databázového objektu. Vyžaduje však o něco více konfigurace a nastavení než přímé ladění databáze.
Databázové objekty lze také ladit prostřednictvím projektů SQL Server. V dalším kurzu se podíváme na používání projektů SQL Server a na to, jak je používat k vytváření a ladění spravovaných databázových objektů.
Všechno nejlepší na programování!
O autorovi
Scott Mitchell, autor sedmi knih o ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, školitel a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Můžete ho zastihnout na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím jeho blogu, který najdete na adrese http://ScottOnWriting.NET.