Sdílet prostřednictvím


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

Scott Mitchell

Stáhnout PDF

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é použít zarážky k zastavení provádění programu a prozkoumání jeho stavu a toku řízení. Spolu s laděním kódu aplikace nabízí Sada Visual Studio podporu ladění uložených procedur z SQL Server. Stejně jako se zarážky dají nastavit v kódu třídy ASP.NET kódu na pozadí nebo třídy Business Logic Layer, tak je také 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, na které dojde při volání uložené procedury ze spuštěné aplikace ASP.NET.

Poznámka

Uložené procedury je bohužel možné v sadě Visual Studio procházet a ladit pouze prostřednictvím verzí Professional a Team Systems. 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 nebudete moct tyto kroky replikovat na svém počítači.

SQL Server koncepty ladění

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. Proto SQL Server 2005 podporuje spravované databázové objekty. To znamená, že můžete vytvářet databázové objekty, jako jsou uložené procedury a funkce User-Defined (UDF) jako metody ve třídě jazyka C#. To umožňuje těmto uloženým procedurám a funkcím UDF využívat funkce v rozhraní .NET Framework a z vašich vlastních tříd. Samozřejmě, SQL Server 2005 také poskytuje podporu pro databázové objekty T-SQL.

SQL Server 2005 nabízí podporu ladění pro objekty T-SQL i spravované databáze. Tyto objekty však lze ladit pouze prostřednictvím edice 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 integrace CLR SQL Server 2005 zdůrazňuje tři způsoby ladění objektů SQL Server 2005 ze sady Visual Studio:

  • Direct Database Debugging (DDD) – z Průzkumníka serveru můžeme krokovat do libovolného databázového objektu T-SQL, jako jsou uložené procedury a uživatelem 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í se předá ladicímu programu. Všimněte si, že při ladění aplikace nemůžeme z kódu aplikace vkročíme do databázového objektu. Musíme explicitně nastavit zarážky v těch uložených procedurách nebo UDF, kde chceme, aby se ladicí program zastavil. Ladění aplikací se prověřuje od kroku 2.
  • Ladění z SQL Server projectu – 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ů. V dalším kurzu prozkoumáme použití SQL Server projektů a ladění jejich obsahu.

Visual Studio může ladit uložené procedury na místních a vzdálených SQL Server instancích. Místní SQL Server instance 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í SQL Server instanci, 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 nejprve zajistit, abyste se při ladění do vývojového počítače přihlásili 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í databáze použité k připojení k databázi ze spuštěné ASP.NET aplikace. 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 pochopte, že podpora ladění pro databázové objekty T-SQL není tak bohatá na funkce jako podpora ladění pro aplikace .NET. Například nejsou podporované podmínky zarážky a filtry, k dispozici je pouze podmnožina oken ladění, nemůžete použít upravit a pokračovat, okamžité okno se vykreslí jako zbytečné atd. Další informace najdete v tématu Omezení pro příkazy a funkce ladicího programu .

Krok 1: Přímý krok 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 název napovídá, Products_SelectByCategoryID vrátí informace o produktu pro určitou kategorii; byl vytvořen v kurzu Použití existujících uložených procedur pro Typed DataSet s TableAdapter kurz. 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 zvolte možnost Krok do uložené procedury. Tím se spustí ladicí program.

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

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

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

Po zadání hodnoty parametru @CategoryID se spustí uložená procedura. Ladicí program ale neskončí až do dokončení, ale zastaví provádění prvního 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 v okně Kukátko nebo tak, že najedete 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 na prvním 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 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 spuště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 SELECT zadat příkaz.

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. V sadě Visual Studio můžeme do uložené procedury přidat zarážky a pak spustit ladění ASP.NET aplikace. Když je z aplikace vyvolána 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 jsme to udělali 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 integrovali 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_CS). 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).

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

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 připojovací řetězec databáze, které aplikace používá, aby bylo sdružování připojení zakázané. 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í je zvýš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ých objektů při vyvolání prostřednictvím webové aplikace. Teď už zbývá jen přidat zarážku do uložené procedury a spustit ladění!

Krok 3: Přidání zarážky a ladění

Otevřete uloženou proceduru Products_SelectByCategoryID a na začátku příkazu nastavte SELECT zarážku 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 znázorňuje obrázek 4, zarážka se zobrazí jako červený kruh na okraji.

Nastavení zarážky v Products_SelectByCategoryID uložené procedury

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é, aby byla databáze nakonfigurována tak, aby podporovala ladění aplikací. Při prvním nastavení zarážky by se toto nastavení mělo automaticky zapnout, ale je vhodné to zkontrolovat znovu. Klikněte pravým tlačítkem na NORTHWND.MDF uzel v Průzkumníku serveru. Místní nabídka by měla obsahovat zaškrtnutou položku nabídky s názvem Ladění aplikace .

Ujistěte se, že je možnost Ladění aplikací povolená.

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

Když je povolená zarážka a možnost Ladění aplikací, 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 se spustí ladicí program a spustí se web.

Uložená Products_SelectByCategoryID procedura byla vytvořena v kurzu Použití existujících uložených procedur pro Typd DataSet s TableAdapter . Odpovídající webová stránka (~/AdvancedDAL/ExistingSprocs.aspx) obsahuje objekt GridView, který zobrazí výsledky vrácené touto uloženou procedurou. Navštivte tuto stránku prostřednictvím prohlížeče. Po dosažení stránky bude zarážka v uložené proceduře Products_SelectByCategoryID nalezena a ovládací prvek vrácen do sady Visual Studio. Stejně jako v kroku 1 můžete procházet příkazy s 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 v plné velikosti)

Byla dosažena zarážka uložené procedury.

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 zvolte jinou kategorii. Tím dojde k zpětnému odeslání a znovu se spustí uložená procedura Products_SelectByCategoryID . Zarážka je znovu nalezena, ale tentokrát @CategoryID hodnota parametru s odráží vybranou položku rozevíracího seznamu s CategoryID.

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

Obrázek 8: Výběr jiné kategorie ze seznamu Drop-Down (kliknutím zobrazíte obrázek v plné velikosti)

Parametr <span class=@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 při návštěvě ExistingSprocs.aspx stránky není nalezena zarážka v Products_SelectByCategoryID uložené proceduře, ujistěte se, že je zaškrtnuté políčko SQL Server v části Ladicí programy na stránce vlastností ASP.NET aplikace, že bylo zakázáno sdružování připojení a zda je povolená možnost ladění aplikací databáze. Pokud problémy přetrvávají, 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 Server 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 pečlivě nakonfigurovat, aby všechno fungovalo správně. Máme před sebou dva základní úkoly:

  • Ujistěte se, že přihlášení použité k připojení k databázi přes ADO.NET patří do sysadmin role.
  • Ujistěte se, že uživatelský účet 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 sysadmin 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 pak z 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 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 Windows jako účet SQL Server ladění. Potom, pokud chcete ladit databázové objekty vzdálené SQL Server instance, spusťte Visual Studio pomocí přihlašovacích údajů tohoto účtu Windows.

Příklad by měl pomoct objasnit věci. Představte si, že v doméně Windows existuje účet Windows s názvem SQLDebug . Tento účet bude potřeba přidat do vzdálené instance SQL Server jako platné přihlášení a jako člena sysadmin role. K ladění vzdálené instance SQL Server ze sady Visual Studio bychom pak museli spustit sadu Visual Studio jako SQLDebug uživatel. Můžete to provést odhlášením z pracovní stanice, zpětným přihlášením jako SQLDebuga následným spuštěním sady Visual Studio, ale jednodušším způsobem by bylo přihlásit se k pracovní stanici pomocí vlastních přihlašovacích údajů a pak spustit runas.exe sadu Visual Studio jako SQLDebug uživatel. runas.exe umožňuje spuštění konkrétní aplikace pod rouškou jiného uživatelského účtu. Pokud chcete spustit Sadu Visual Studio jako SQLDebug, můžete na příkazovém řádku zadat následující příkaz:

runas.exe /user:SQLDebug "%PROGRAMFILES%\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"

Podrobnější vysvětlení k tomuto procesu najdete v tématu Průvodce hitchhikerem 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 uvádí, že to zahrnuje 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 do seznamu Výjimky. Pokud vaše zásady domény vyžadují, aby se síťová komunikace prováděla přes protokol IPSec, musíte otevřít porty UDP 4500 a UDP 500.

Souhrn

Kromě podpory ladění pro kód aplikace .NET poskytuje 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 přímo ladit databázový objekt T-SQL, vyhledejte objekt v Průzkumníku serveru, klikněte na něj pravým tlačítkem a zvolte Krok do. 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. Při vyvolání databázového objektu se zarážkou z klientské aplikace (například ASP.NET webové aplikace), program se zastaví, jakmile ladicí program převezme. 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 jejich použití k vytváření a ladění spravovaných databázových objektů.

Šťastné 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 najít na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím jeho blogu, který najdete na http://ScottOnWriting.NETadrese .