Sdílet prostřednictvím


Ladění uložených procedur (VB)

od Scotta Mitchella

Stáhnout PDF

Edice Visual Studio Professional a Team System umožňují nastavit lámací body a krokovat v uložených procedurách v SQL Serveru, čímž se ladění uložených procedur jednoduše provádí jako ladění kódu aplikace. Tento kurz ukazuje přímé ladění databáze a ladění aplikací uložených procedur.

Úvod

Visual Studio poskytuje bohaté možnosti ladění. Pomocí několika stisknutí kláves nebo kliknutí myši je možné použít zarážky k zastavení provádění programu a prozkoumání jeho stavu a řízení toku. Kromě ladění kódu aplikace nabízí Visual Studio podporu pro ladění uložených procedur z SQL Serveru. Stejně jako zarážky se dají nastavit ve třídě kódu ASP.NET za stránkou nebo ve třídě vrstvy obchodní logiky, tak i je možné je umístit do 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é se aktivují při volání uložené procedury ze spuštěné aplikace ASP.NET.

Poznámka:

Uložené procedury je bohužel možné vstoupit do 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 na svém počítači nebudete moct replikovat.

Koncepty ladění SQL Serveru

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. Sql Server 2005 proto podporuje spravované databázové objekty. To znamená, že můžete vytvářet databázové objekty, jako jsou uložené procedury a User-Defined Functions (UDF) jako metody ve třídě 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 je však možné ladit pouze v edicích Visual Studio 2005 Professional a Team Systems. V tomto kurzu prozkoumáme ladění objektů databáze T-SQL. Následující kurz se zabývá laděním spravovaných databázových objektů.

Blogový příspěvek "Přehled ladění T-SQL a CLR v SQL Serveru 2005" od týmu "SQL Server 2005 CLR Integration" zdůrazňuje tři způsoby, jak ladit objekty SQL Serveru 2005 pomocí Visual Studio:

  • Přímé ladění databáze (DDD) – z Průzkumníka serveru můžeme prověřovat libovolný objekt databáze T-SQL, jako jsou uložené procedury a uživatelsky definované funkce. V kroku 1 prozkoumáme DDD.
  • Ladění aplikace – můžeme nastavit zarážky v databázovém objektu a pak spustit naši ASP.NET aplikaci. Při spuštění databázového objektu dojde k zarážce a řízení se předá ladicímu programu. Upozorňujeme, že při ladění aplikace nemůžeme přejít do databázového objektu ze souboru aplikace. V UDF nebo uložených procedurách musíme explicitně nastavit zarážky, na kterých chceme ladicí program zastavit. Ladění aplikací se zkoumá od kroku 2.
  • Ladění z projektu SQL Serveru – edice Visual Studio Professional a Team Systems zahrnují typ projektu SQL Serveru, který se běžně používá k vytváření spravovaných databázových objektů. V dalším kurzu prozkoumáme použití projektů SQL Serveru a ladění jejich obsahu.

Visual Studio může ladit uložené procedury na místních a vzdálených instancích SQL Serveru. Místní instance SQL Serveru je instance, která je nainstalovaná na stejném počítači jako Visual Studio. Pokud databáze SQL Serveru, kterou používáte, není umístěná 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 Serveru. 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 Serveru, můžete začít krokem 1 a projít si tento kurz až do konce. Pokud ale používáte vzdálenou instanci SQL Serveru, musíte se nejprve ujistit, že při ladění jste přihlášeni k vývojovému počítači pomocí uživatelského účtu Systému Windows, který má ve vzdálené instanci přihlášení k SQL Serveru. Kromě toho musí být toto přihlášení k databázi i přihlášení použité pro připojení ze spuštěné aplikace ASP.NET členy role sysadmin. Další informace o konfiguraci sady Visual Studio a SQL Serveru pro ladění vzdálených instancí najdete v části Ladění objektů T-SQL Database na konci tohoto kurzu.

Nakonec si uvědomte, že podpora ladění databázových objektů T-SQL není tak bohatá jako podpora ladění pro aplikace .NET. Například podmínky zarážky a filtry nejsou podporovány, je k dispozici pouze podmnožina oken pro ladění, nemůžete použít funkci Upravit a Pokračovat, okno Okamžité je nepoužitelné atd. Další informace najdete v tématu Omezení příkazů a funkcí ladicího programu .

Krok 1: Přímé krokování do uložené procedury

Visual Studio usnadňuje přímé ladění databázového objektu. Pojďme se podívat, jak pomocí funkce DDD (Direct Database Debugging) přejít do Products_SelectByCategoryID uložené procedury v databázi Northwind. Jak už název napovídá, Products_SelectByCategoryID vrací informace o produktu pro určitou kategorii; byla vytvořena v tutoriálu Použití existujících uložených procedur pro TableAdaptery typizovaného datového souboru. 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 myši na uloženou proceduru Products_SelectByCategoryID a v místní nabídce zvolte možnost Krok do uložené procedury. Tím spustíte ladicí program.

Products_SelectByCategoryID Vzhledem k tomu, že uložená procedura @CategoryID očekává vstupní parametr, zobrazí se výzva k zadání této hodnoty. Zadejte 1, který vrátí informace o nápojích.

Použijte hodnotu 1 pro <span class= @CategoryID parametru" />

Obrázek 1: Použití hodnoty 1 pro @CategoryID parametr

Po zadání hodnoty parametru @CategoryID se spustí uložená procedura. Místo aby byl prováděn až do konce, ladicí program zastaví provádění u prvního příkazu. Všimněte si žluté šipky na okraji označující aktuální umístění v uložené proceduře. Hodnoty parametrů můžete zobrazit a upravit v okně Kukátko nebo najeďte myší na název parametru v uložené proceduře.

Ladicí program se zastavil na prvním příkazu uložené procedury.

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 jednom příkazu, klikněte na tlačítko Krok 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 jeho výstup zobrazí v okně Výstup a ladicí program se ukončí.

Poznámka:

Ladění T-SQL probíhá na úrovni příkazu; nelze krokovat do SELECT příkazu.

Krok 2: Konfigurace webu pro ladění aplikací

I když ladění uložené procedury přímo z Průzkumníka serveru je 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. Můžeme přidat zarážky do uložené procedury v prostředí Visual Studio a poté spustit ladění aplikace ASP.NET. 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 jeho příkazy stejně jako v kroku 1.

Než začneme s laděním uložených procedur volaným z aplikace, musíme dát ASP.NET webové aplikaci pokyn, aby se integroval s ladicím programem SQL Serveru. Začněte kliknutím pravým tlačítkem na název webu v Průzkumníku řešení (ASPNET_Data_Tutorial_74_VB). V místní nabídce zvolte možnost Stránky vlastností, vyberte položku Možnosti spuštění vlevo a zaškrtněte políčko SQL Server v sekci Ladicí programy (viz obrázek 3).

Zaškrtněte políčko SQL Server na stránkách vlastností aplikace.

Obrázek 3: Zaškrtněte políčko SQL Serveru na stránkách vlastností aplikace (kliknutím zobrazíte obrázek v plné velikosti).

Kromě toho potřebujeme aktualizovat připojovací řetězec databáze používaný aplikací, aby bylo sdružování připojení zakázané. Při zavř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í, a nemusíte vytvářet a navazovat nové připojení. Toto sdružování objektů připojení je vylepšení výkonu a ve výchozím nastavení je povolené. Při ladění ale chceme vypnout sdružování připojení, 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 zakázat sdružování připojení, aktualizujte nastavení NORTHWNDConnectionStringWeb.config tak, aby zahrnovalo 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 Serveru prostřednictvím aplikace ASP.NET nezapomeňte obnovit sdružování připojení odebráním Pooling nastavení z připojovacího řetězce (nebo nastavením na Pooling=true ).

V tomto okamžiku byla aplikace ASP.NET nakonfigurována tak, aby visual Studio umožňovala ladění databázových objektů SQL Serveru při vyvolání prostřednictvím webové aplikace. Vše, co teď zbývá, je přidat bod přerušení do uložené procedury a spustit ladění!

Krok 3: Přidání bodu přerušení 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 SELECT na začátek příkazu a stisknutím klávesy F9. Jak znázorňuje obrázek 4, zarážka se zobrazí jako červený kruh na okraji.

Nastavit zarážku v uložené proceduře Products_SelectByCategoryID

Obrázek 4: Nastavení zarážky v Products_SelectByCategoryID uložené proceduře (kliknutím zobrazíte obrázek v plné velikosti)

Aby bylo možné objekt databáze SQL ladit prostřednictvím klientské aplikace, je nezbytné, aby byla databáze nakonfigurovaná tak, aby podporovala ladění aplikací. Při prvním nastavení zarážky by se toto nastavení mělo automaticky zapnout, ale je vhodné pozorně zkontrolovat. Klikněte pravým tlačítkem myši na NORTHWND.MDF uzel v Průzkumníku serveru. Místní nabídka by měla obsahovat označenou položku nabídky s názvem Ladění aplikace.

Ujistěte se, že je povolená možnost ladění aplikace.

Obrázek 5: Ujistěte se, že je povolená možnost ladění aplikace.

S povolenou zarážkou a povolenou možností Ladění aplikace jsme připraveni ladit uloženou proceduru při volání z aplikace ASP.NET. Spusťte ladicí program tak, že přejdete do nabídky Ladění a zvolíte Spustit ladění, stisknutím klávesy F5 nebo kliknutím na zelenou ikonu přehrávání na panelu nástrojů. Tím spustíte ladicí program a spustíte web.

Uložená Products_SelectByCategoryID procedura byla vytvořena v kurzu Použití existujících uložených procedur pro Typed DataSet s TableAdapter . Odpovídající webová stránka (~/AdvancedDAL/ExistingSprocs.aspx) obsahuje Objekt GridView, který zobrazuje výsledky vrácené touto uloženou procedurou. Navštivte tuto stránku v prohlížeči. Po dosažení stránky bude zarážka v uložené proceduře Products_SelectByCategoryID aktivována 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ů.

Na stránce ExistingSprocs.aspx se zpočátku zobrazují nápoje.

Obrázek 6: Stránka ExistingSprocs.aspx zpočátku zobrazuje nápoje (kliknutím zobrazíte obrázek plné velikosti)

Byl dosažen bod přerušení uložené procedury.

Obrázek 7: Bylo dosaženo bodu zarážky skladovací procedury (kliknutím zobrazíte obrázek v plné velikosti)

Jak ukazuje okno Kukátko na obrázku 7, hodnota parametru @CategoryID je 1. Důvodem je to, že ExistingSprocs.aspx stránka zpočátku zobrazuje produkty v kategorii nápojů, která má CategoryID hodnotu 1. V rozevíracím seznamu vyberte jinou kategorii. Tímto dojde k postbacku a znovu se spustí uložená procedura Products_SelectByCategoryID. Zarážka se znovu zobrazí, ale tentokrát hodnota parametru @CategoryID odráží vybranou položku rozevíracího seznamu s CategoryID.

Výběr jiné kategorie ze seznamu Drop-Down

Obrázek 8: Volba jiné kategorie ze seznamu Drop-Down (kliknutím zobrazíte obrázek s plnou velikostí)

Parametr <span class= @CategoryID odráží kategorii vybranou z webové stránky" />

Obrázek 9: @CategoryID Parametr odráží kategorii vybranou z webové stránky (kliknutím zobrazíte obrázek v plné velikosti).

Poznámka:

Pokud při návštěvě stránky Products_SelectByCategoryID není zarážka v uložené proceduře ExistingSprocs.aspx zachycena, ujistěte se, že je políčko SQL Server zaškrtnuté v části Ladicí programy na stránce vlastností aplikace ASP.NET, že sdružování připojení bylo zakázáno a že je povolena možnost Ladění databáze aplikace. Pokud stále máte problémy, restartujte 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 databáze SQL Serveru na stejném počítači jako Visual Studio. Pokud se ale SQL Server a Visual Studio nacházejí na různých počítačích, je potřeba provést určitou pečlivou konfiguraci, aby všechno fungovalo správně. Existují dva základní úkoly, se kterými se setkáváme:

  • Ujistěte se, že přihlášení použité k připojení k databázi prostřednictvím ADO.NET patří k sysadmin roli.
  • Ujistěte se, že uživatelský účet systému Windows používaný sadou Visual Studio na vývojovém počítači je platný přihlašovací účet SQL Serveru, který patří do sysadmin této role.

První krok je poměrně jednoduchý. Nejprve identifikujte uživatelský účet použitý k připojení k databázi z aplikace ASP.NET a potom z aplikace SQL Server Management Studio přidejte tento přihlašovací účet do sysadmin role.

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, pomocí který jste se přihlásili k pracovní stanici, není platným přihlášením na SQL Serveru. Místo přidání konkrétního přihlašovacího účtu na SQL Server by lepší volbou je určit nějaký uživatelský účet systému Windows jako účet ladění SYSTÉMU SQL Server. Pro ladění databázových objektů vzdálené instance SQL Serveru spusťte Visual Studio pomocí přihlašovacích údajů účtu systému Windows.

Příklad by měl pomoct objasnit věci. Představte si, že v doméně Windows existuje účet SQLDebug. Tento účet bude potřeba přidat do vzdálené instance SQL Serveru jako platné přihlášení a jako člena sysadmin role. Pokud pak chcete ladit vzdálenou instanci SQL Serveru ze sady Visual Studio, museli bychom jako uživatel spustit Visual Studio SQLDebug . Můžete to provést tak, že se odhlásíte z pracovní stanice, přihlásíte se jako SQLDebuga pak spustíte Visual Studio, ale jednodušším přístupem bude přihlášení k pracovní stanici pomocí vlastních přihlašovacích údajů a následné runas.exe spuštění sady Visual Studio jako SQLDebug uživatel. runas.exe umožňuje, aby se určitá aplikace spouštěla v rámci jiného uživatelského účtu. Visual Studio spustíte jako SQLDebug, když na příkazovém řádku zadáte 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 příručce Williama R. VaughnaHitchhikera k sadě Visual Studio a SQL Serveru, sedmé vydání.

Poznámka:

Pokud vaše vývojové zařízení běží na Windows XP Service Pack 2, budete muset nakonfigurovat bránu firewall pro připojení k internetu, aby umožňovala vzdálené ladění. Článek Postupy: Povolení ladění SYSTÉMU 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ýjimek 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 do seznamu výjimek. Pokud vaše zásady domény vyžadují, aby se síťová komunikace prováděla prostřednictvím protokolu IPSec, musíte otevřít porty UDP 4500 a UDP 500.

Shrnutí

Kromě poskytování podpory ladění pro kód aplikace .NET poskytuje 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í: Ladění přímé databáze a ladění aplikací. Chcete-li přímo ladit objekt databáze T-SQL, vyhledejte objekt prostřednictvím Průzkumníka serveru a klikněte na něj pravým tlačítkem myši a zvolte Krok do. Tím se spustí ladicí program a zastaví se u prvního příkazu v databázovém objektu, ve kterém můžete procházet příkazy objektu a zobrazit a upravit hodnoty parametrů. V kroku 1 jsme tento přístup použili pro krokování do Products_SelectByCategoryID uložené procedury.

Ladění aplikace umožňuje nastavit zarážky přímo v databázových objektech. Při spuštění databázového objektu s přerušovacími body z klientské aplikace (například z webové aplikace ASP.NET) se program zastaví, protože nad ním převzal kontrolu ladicí program. Ladění aplikací je užitečné, protože jasněji ukazuje, jaká akce aplikace způsobí vyvolání konkrétního databázového objektu. Konfigurace a nastavení ale vyžaduje trochu více než ladění přímo na databázi.

Databázové objekty lze také ladit prostřednictvím projektů SQL Serveru. V dalším kurzu se podíváme na použití projektů SQL Serveru a na to, jak je používat k vytváření a ladění spravovaných databázových objektů.

Šťastné programování!

O autorovi

Scott Mitchell, autor sedmi knih ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, trenér a spisovatel. Jeho nejnovější kniha je Sams: Nauč se ASP.NET 2.0 za 24 hodin. Může být dosažitelný na mitchell@4GuysFromRolla.comadrese .