Sdílet prostřednictvím


Použití stávajících uložených procedur komponentami TableAdapter typových sad dat (VB)

Scott Mitchell

Stáhnout PDF

V předchozím kurzu jsme zjistili, jak pomocí Průvodce objektem TableAdapter generovat nové uložené procedury. V tomto kurzu se dozvíme, jak může stejný Průvodce objektem TableAdapter pracovat s existujícími uloženými procedurami. Naučíme se také ručně přidávat nové uložené procedury do naší databáze.

Úvod

V předchozím kurzu jsme viděli, jak lze objekty TableAdapter typed DataSet s nakonfigurovat tak, aby k přístupu k datům používaly uložené procedury místo ad hoc příkazů SQL. Konkrétně jsme prozkoumali, jak nastavit, aby průvodce TableAdapter tyto uložené procedury automaticky vytvořil. Při přenosu starší verze aplikace do ASP.NET 2.0 nebo při vytváření webu ASP.NET 2.0 kolem existujícího datového modelu je pravděpodobné, že databáze již obsahuje uložené procedury, které potřebujeme. Případně můžete raději vytvořit uložené procedury ručně nebo pomocí jiného nástroje, než je průvodce TableAdapter, který automaticky generuje uložené procedury.

V tomto kurzu se podíváme na to, jak nakonfigurovat objekt TableAdapter tak, aby používal existující uložené procedury. Vzhledem k tomu, že databáze Northwind obsahuje jenom malou sadu předdefinovaných uložených procedur, podíváme se také na kroky potřebné k ručnímu přidání nových uložených procedur do databáze prostřednictvím prostředí sady Visual Studio. Pojďme začít!

Poznámka

V kurzu Zabalení úprav databáze v rámci transakce jsme do objektu TableAdapter přidali metody pro podporu transakcí (BeginTransaction, CommitTransactionatd.). Alternativně je možné transakce spravovat zcela v rámci uložené procedury, což nevyžaduje žádné úpravy kódu vrstvy přístupu k datům. V tomto kurzu prozkoumáme příkazy T-SQL používané ke spuštění příkazů s uložených procedur v rámci transakce.

Krok 1: Přidání uložených procedur do databáze Northwind

Visual Studio usnadňuje přidávání nových uložených procedur do databáze. Pojďme do databáze Northwind přidat novou uloženou proceduru, která vrátí všechny sloupce z Products tabulky pro ty, které mají určitou CategoryID hodnotu. V okně Průzkumník serveru rozbalte databázi Northwind, aby se zobrazily její složky – Databázové diagramy, tabulky, zobrazení atd. Jak jsme viděli v předchozím kurzu, složka Uložené procedury obsahuje existující uložené procedury databáze. Pokud chcete přidat novou uloženou proceduru, jednoduše klikněte pravým tlačítkem na složku Uložené procedury a v místní nabídce zvolte možnost Přidat novou uloženou proceduru.

Klikněte pravým tlačítkem na složku Uložené procedury a přidejte novou uloženou proceduru.

Obrázek 1: Right-Click složky Uložené procedury a přidat novou uloženou proceduru (kliknutím zobrazíte obrázek v plné velikosti)

Obrázek 1 ukazuje, že výběrem možnosti Přidat novou uloženou proceduru se v sadě Visual Studio otevře okno skriptu s osnovou skriptu SQL potřebného k vytvoření uložené procedury. Naším úkolem je tento skript zmasilit a spustit. V tomto okamžiku se uložená procedura přidá do databáze.

Zadejte následující skript:

CREATE PROCEDURE dbo.Products_SelectByCategoryID 
(
    @CategoryID int
)
AS
SELECT ProductID, ProductName, SupplierID, CategoryID, 
       QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, 
       ReorderLevel, Discontinued
FROM Products
WHERE CategoryID = @CategoryID

Tento skript po spuštění přidá do databáze Northwind novou uloženou proceduru s názvem Products_SelectByCategoryID. Tato uložená procedura přijímá jeden vstupní parametr (@CategoryIDtypu int) a vrací všechna pole pro tyto produkty s odpovídající CategoryID hodnotou.

Pokud chcete spustit tento CREATE PROCEDURE skript a přidat uloženou proceduru do databáze, klikněte na panelu nástrojů na ikonu Uložit nebo stiskněte Ctrl+S. Po provedení této operace se složka Uložené procedury aktualizuje a zobrazí nově vytvořenou proceduru. Skript v okně také změní jemnost z CREATE PROCEDURE dbo.Products_SelectProductByCategoryID na ALTER PROCEDUREdbo.Products_SelectProductByCategoryID. CREATE PROCEDURE přidá do databáze novou uloženou proceduru a aktualizuje ALTER PROCEDURE existující proceduru. Vzhledem k tomu, že se začátek skriptu změnil na ALTER PROCEDURE, změna vstupních parametrů uložených procedur nebo příkazů SQL a kliknutím na ikonu Uložit aktualizuje uloženou proceduru s těmito změnami.

Obrázek 2 znázorňuje sadu Visual Studio po Products_SelectByCategoryID uložení uložené procedury.

Uložená procedura Products_SelectByCategoryID byla přidána do databáze.

Obrázek 2: Uložená procedura Products_SelectByCategoryID byla přidána do databáze (kliknutím zobrazíte obrázek v plné velikosti)

Krok 2: Konfigurace objektu TableAdapter pro použití existující uložené procedury

Teď, když Products_SelectByCategoryID byla uložená procedura přidána do databáze, můžeme nakonfigurovat vrstvu přístupu k datům tak, aby tuto uloženou proceduru používala při vyvolání jedné z jejích metod. Konkrétně do objektu Typed DataSet přidáme metodu GetProductsByCategoryID(<_i22_>categoryID)<!--_i22_-->ProductsTableAdapterNorthwindWithSprocs, která volá právě vytvořenou uloženou proceduru.Products_SelectByCategoryID

Začněte otevřením NorthwindWithSprocs datové sady. Klikněte pravým tlačítkem myši na ProductsTableAdapter a zvolte Přidat dotaz, aby se spustil průvodce Konfigurace dotazu TableAdapter. V předchozím kurzu jsme se rozhodli, že pro nás objekt TableAdapter vytvoří novou uloženou proceduru. Pro účely tohoto kurzu však chceme připojit novou metodu TableAdapter k existující Products_SelectByCategoryID uložené proceduře. Proto v prvním kroku průvodce zvolte možnost Použít existující uloženou proceduru a potom klikněte na Další.

Zvolte možnost Použít existující uloženou proceduru.

Obrázek 3: Zvolte možnost Použít existující uloženou proceduru (kliknutím zobrazíte obrázek v plné velikosti)

Následující obrazovka obsahuje rozevírací seznam naplněný uloženými procedurami databáze. Když vyberete uloženou proceduru, zobrazí se její vstupní parametry vlevo a na pravé straně vrácené datové pole (pokud existují). V seznamu zvolte uloženou Products_SelectByCategoryID proceduru a klikněte na Další.

Výběr Products_SelectByCategoryID uložené procedury

Obrázek 4: Vyberte uloženou proceduru Products_SelectByCategoryID (kliknutím zobrazíte obrázek v plné velikosti)

Další obrazovka se ptá, jaký druh dat vrací uložená procedura a naše odpověď zde určuje typ vrácený metodou TableAdapter s. Pokud například označíme, že jsou vrácena tabulková data, vrátí metoda instanci naplněnou ProductsDataTable záznamy vrácenými uloženou procedurou. Naproti tomu pokud označíme, že tato uložená procedura vrátí jednu hodnotu, tableAdapter vrátí Object hodnotu, která je přiřazena v prvním sloupci prvního záznamu vráceného uloženou procedurou.

Vzhledem k tomu, že uložená Products_SelectByCategoryID procedura vrací všechny produkty, které patří do určité kategorie, zvolte první odpověď – Tabulková data – a klikněte na Další.

Označení, že uložená procedura vrací tabulková data

Obrázek 5: Označuje, že uložená procedura vrací tabulková data (kliknutím zobrazíte obrázek v plné velikosti)

Zbývá jen určit, jaké vzory metod použít, a názvy těchto metod. Ponechte zaškrtnuté možnosti Vyplnit tabulku DataTable i Vrátit dataTable, ale přejmenujte metody na FillByCategoryID a GetProductsByCategoryID. Potom klikněte na Další a prohlédněte si souhrn úloh, které průvodce provede. Pokud všechno vypadá správně, klikněte na Dokončit.

Pojmenujte metody FillByCategoryID a GetProductsByCategoryID.

Obrázek 6: Pojmenujte metody FillByCategoryID a GetProductsByCategoryID (kliknutím zobrazíte obrázek v plné velikosti)

Poznámka

Metody TableAdapter, které jsme právě vytvořili, FillByCategoryID a GetProductsByCategoryIDočekávají vstupní parametr typu Integer. Tato hodnota vstupního parametru se předává uložené proceduře prostřednictvím jejího @CategoryID parametru. Pokud upravíte Products_SelectByCategory parametry uložené procedury, budete muset také aktualizovat parametry pro tyto metody TableAdapter. Jak bylo popsáno v předchozím kurzu, můžete to provést jedním ze dvou způsobů: ručním přidáním nebo odebráním parametrů z kolekce parametrů nebo opětovným spuštěním průvodce TableAdapter.

Krok 3: PřidáníGetProductsByCategoryID(categoryID)metody do BLL

GetProductsByCategoryID Po dokončení metody DAL je dalším krokem poskytnutí přístupu k této metodě ve vrstvě obchodní logiky. ProductsBLLWithSprocs Otevřete soubor třídy a přidejte následující metodu:

<System.ComponentModel.DataObjectMethodAttribute _
    (System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetProductsByCategoryID(ByVal categoryID As Integer) _
    As NorthwindWithSprocs.ProductsDataTable
    Return Adapter.GetProductsByCategoryID(categoryID)
End Function

Tato metoda BLL jednoduše vrátí vrácenou ProductsDataTable metodu ProductsTableAdapter s GetProductsByCategoryID . Atribut DataObjectMethodAttribute poskytuje metadata používaná průvodcem Konfigurace zdroje dat ObjectDataSource. Konkrétně se tato metoda zobrazí v rozevíracím seznamu karet SELECT.

Krok 4: Zobrazení produktů podle kategorie

Chcete-li otestovat nově přidanou Products_SelectByCategoryID uloženou proceduru a odpovídající metody DAL a BLL, nechme vytvořit ASP.NET stránku, která obsahuje DropDownList a GridView. Rozevírací seznam zobrazí seznam všech kategorií v databázi, zatímco GridView zobrazí produkty, které patří do vybrané kategorie.

Poznámka

V předchozích kurzech jsme vytvořili hlavní/podrobná rozhraní pomocí DropDownLists. Podrobnější pohled na implementaci takové hlavní nebo podrobné sestavy najdete v kurzu Filtrování hlavních a podrobných dat pomocí rozevíracího seznamu .

ExistingSprocs.aspx Otevřete stránku ve AdvancedDAL složce a přetáhněte rozevírací seznam ze sady nástrojů do Designer. Vlastnost DropDownList s ID nastavte na Categories a její AutoPostBack vlastnost na True. Dále z inteligentní značky vytvořte vazbu DropDownList k novému objektu ObjectDataSource s názvem CategoriesDataSource. Nakonfigurujte ObjectDataSource tak, aby načítal data z CategoriesBLL metody třídy s GetCategories . Nastavte rozevírací seznamy na kartách UPDATE, INSERT a DELETE na (Žádné) .

Načtení dat z metody GetCategories třídy CategoriesBLL

Obrázek 7: Načtení dat z CategoriesBLL metody Třídy s GetCategories (kliknutím zobrazíte obrázek v plné velikosti)

Nastavte Drop-Down Seznamy na kartách UPDATE, INSERT a DELETE na (Žádné).

Obrázek 8: Nastavení Drop-Down Seznamy na kartách UPDATE, INSERT a DELETE na (Žádné) (Kliknutím zobrazíte obrázek v plné velikosti)

Po dokončení průvodce ObjectDataSource nakonfigurujte DropDownList tak, aby se zobrazilo CategoryName datové pole a aby se pole používalo CategoryID jako Value pole pro každý ListItemobjekt .

V tomto okamžiku by deklarativní značky DropDownList a ObjectDataSource měly vypadat přibližně takto:

<asp:DropDownList ID="Categories" runat="server" AutoPostBack="True" 
    DataSourceID="CategoriesDataSource" DataTextField="CategoryName" 
    DataValueField="CategoryID">
</asp:DropDownList>
<asp:ObjectDataSource ID="CategoriesDataSource" runat="server"
    OldValuesParameterFormatString="original_{0}" 
    SelectMethod="GetCategories" TypeName="CategoriesBLL">
</asp:ObjectDataSource>

Potom přetáhněte Objekt GridView na Designer a umístěte ho pod rozevírací seznam. Nastavte Objekt GridView na IDProductsByCategory a z jeho inteligentní značky vytvořte vazbu k novému objektu ObjectDataSource s názvem ProductsByCategoryDataSource. ProductsByCategoryDataSource Nakonfigurujte ObjectDataSource tak, aby používala ProductsBLLWithSprocs třídu , která načítá data pomocí GetProductsByCategoryID(categoryID) metody . Vzhledem k tomu, že tento Objekt GridView bude použit pouze k zobrazení dat, nastavte rozevírací seznamy na kartách UPDATE, INSERT a DELETE na (Žádný) a klikněte na Další.

Konfigurace objektu ObjectDataSource pro použití třídy ProductsBLLWithSprocs

Obrázek 9: Konfigurace objektu ObjectDataSource pro použití ProductsBLLWithSprocs třídy (kliknutím zobrazíte obrázek v plné velikosti)

Načtení dat z metody GetProductsByCategoryID(categoryID)

Obrázek 10: Načtení dat z GetProductsByCategoryID(categoryID) metody (kliknutím zobrazíte obrázek v plné velikosti)

Metoda zvolená na kartě SELECT očekává parametr, takže poslední krok průvodce nás vyzve k zadání zdroje parametru s. Nastavte rozevírací seznam Zdroj parametrů na Ovládací prvek a zvolte Categories ovládací prvek z rozevíracího seznamu ControlID. Dokončete průvodce kliknutím na Dokončit.

Jako zdroj parametru categoryID použijte rozevírací seznam kategorií.

Obrázek 11: Použití rozevíracího Categories seznamu jako zdroje parametru categoryID (kliknutím zobrazíte obrázek v plné velikosti)

Po dokončení průvodce ObjectDataSource přidá Visual Studio boundFields a CheckBoxField pro každé z datových polí produktu. Tato pole si můžete přizpůsobit podle potřeby.

Přejděte na stránku prostřednictvím prohlížeče. Při návštěvě stránky je vybrána kategorie Nápoje a odpovídající produkty uvedené v mřížce. Změna rozevíracího seznamu na alternativní kategorii, jak je znázorněno na obrázku 12, způsobí zpětné odeslání a znovu načte mřížku s produkty nově vybrané kategorie.

Produkty v kategorii Plodiny jsou zobrazeny

Obrázek 12: Zobrazí se produkty v kategorii Plodin (kliknutím zobrazíte obrázek v plné velikosti)

Krok 5: Zabalení příkazů uložené procedury v rámci rozsahu transakce

V kurzu Zabalení úprav databáze v rámci transakce jsme probrali techniky pro provádění řady příkazů úprav databáze v rámci rozsahu transakce. Vzpomeňte si, že změny provedené v rámci transakce buď všechny úspěšné, nebo všechny selžou, zaručují nedělitelnost. Mezi techniky použití transakcí patří:

  • Pomocí tříd v System.Transactions oboru názvů,
  • Použití vrstvy přístupu k datům ADO.NET tříd, jako jsou SqlTransaction, a
  • Přidání příkazů transakce T-SQL přímo v rámci uložené procedury

Kurz Zabalení úprav databáze v rámci transakce používal třídy ADO.NET v DAL. Zbývající část tohoto kurzu zkoumá, jak spravovat transakci pomocí příkazů T-SQL z uložené procedury.

Tři klíčové příkazy SQL pro ruční spuštění, potvrzení a vrácení transakce jsou BEGIN TRANSACTION, COMMIT TRANSACTIONa ROLLBACK TRANSACTION. Stejně jako u ADO.NET přístupu musíme při použití transakcí z uložené procedury použít následující vzor:

  1. Označuje začátek transakce.
  2. Spusťte příkazy SQL, které tvoří transakci.
  3. Pokud v některém z příkazů z kroku 2 dojde k chybě, vraťte transakci zpět.
  4. Pokud se všechny příkazy z kroku 2 dokončí bez chyby, potvrďte transakci.

Tento vzor lze implementovat v syntaxi T-SQL pomocí následující šablony:

BEGIN TRY
  BEGIN TRANSACTION -- Start the transaction
  ... Perform the SQL statements that makeup the transaction ...
  -- If we reach here, success!
  COMMIT TRANSACTION
END TRY
BEGIN CATCH 
  -- Whoops, there was an error
  ROLLBACK TRANSACTION
  -- Raise an error with the 
  -- details of the exception   
  DECLARE @ErrMsg nvarchar(4000),
          @ErrSeverity int 
  SELECT @ErrMsg = ERROR_MESSAGE(), 
         @ErrSeverity = ERROR_SEVERITY() 
 
  RAISERROR(@ErrMsg, @ErrSeverity, 1) 
END CATCH

Šablona začíná definováním TRY...CATCH bloku, konstruktoru nového SQL Server 2005. Stejně jako v Try...Catch případě bloků v jazyce Visual Basic provádí blok SQL TRY...CATCH příkazy v TRY bloku . Pokud některý příkaz vyvolá chybu, ovládací prvek se okamžitě přenese do CATCH bloku.

Pokud při provádění příkazů SQL, které tvoří transakci, nedojde k chybám, COMMIT TRANSACTION příkaz potvrdí změny a transakci dokončí. Pokud však jeden z příkazů vede k chybě, ROLLBACK TRANSACTION vrátí objekt v CATCH bloku databázi do stavu před zahájením transakce. Uložená procedura také vyvolá chybu pomocí příkazu RAISERROR, který způsobí SqlException vyvolání objektu v aplikaci.

Poznámka

Vzhledem k tomu, že TRY...CATCH blok je v SQL Server 2005 nový, výše uvedená šablona nebude fungovat, pokud používáte starší verze Microsoft SQL Server.

Podívejme se na konkrétní příklad. Mezi tabulkami a Products existuje omezení cizího Categories klíče, což znamená, že každé CategoryID pole v Products tabulce se musí mapovat na CategoryID hodnotu v Categories tabulce. Jakákoli akce, která by toto omezení porušila, například pokus o odstranění kategorie s přidruženými produkty, způsobí porušení omezení cizího klíče. Pokud to chcete ověřit, znovu se podívejte na příklad Aktualizace a odstranění existujících binárních dat v části Práce s binárními daty (~/BinaryData/UpdatingAndDeleting.aspx). Tato stránka obsahuje seznam všech kategorií v systému spolu s tlačítky Upravit a Odstranit (viz Obrázek 13), ale pokud se pokusíte odstranit kategorii, která má přidružené produkty ( například Nápoje), odstranění se nezdaří kvůli porušení omezení cizího klíče (viz Obrázek 14).

Každá kategorie se zobrazí v zobrazení GridView s tlačítky Upravit a Odstranit.

Obrázek 13: Každá kategorie se zobrazí v zobrazení GridView s tlačítky Upravit a Odstranit (kliknutím zobrazíte obrázek v plné velikosti)

Nelze odstranit kategorii, která obsahuje existující produkty

Obrázek 14: Nelze odstranit kategorii, která obsahuje existující produkty (kliknutím zobrazíte obrázek v plné velikosti)

Představte si ale, že chceme povolit odstranění kategorií bez ohledu na to, jestli mají přidružené produkty. Pokud by se odstranila kategorie s produkty, představte si, že chceme odstranit i její stávající produkty (i když další možností je jednoduše nastavit hodnoty jejích produktů CategoryID na NULL). Tuto funkci je možné implementovat prostřednictvím kaskádových pravidel omezení cizího klíče. Případně můžeme vytvořit uloženou proceduru, která přijme vstupní parametr a při vyvolání explicitně odstraní všechny přidružené produkty a pak zadanou @CategoryID kategorii.

První pokus o takovou uloženou proceduru může vypadat takto:

CREATE PROCEDURE dbo.Categories_Delete
(
    @CategoryID int
)
AS
-- First, delete the associated products...
DELETE FROM Products
WHERE CategoryID = @CategoryID
-- Now delete the category
DELETE FROM Categories
WHERE CategoryID = @CategoryID

I když to určitě odstraní přidružené produkty a kategorii, nedělá to pod střechou transakce. Představte si, že existuje nějaké jiné omezení Categories cizího klíče, které by zakazovalo odstranění konkrétní @CategoryID hodnoty. Problém je v tom, že v takovém případě budou odstraněny všechny produkty předtím, než se pokusíme kategorii odstranit. Čistým výsledkem je, že pro takovou kategorii by tato uložená procedura odebrala všechny své produkty, zatímco kategorie zůstala, protože stále obsahuje související záznamy v některé jiné tabulce.

Pokud by však uložená procedura byla zabalena v rámci transakce, odstranění do Products tabulky by se vrátilo zpět v případě neúspěšného odstranění na Categories. Následující skript uložené procedury používá transakci k zajištění nedělitelnosti mezi dvěma DELETE příkazy:

CREATE PROCEDURE dbo.Categories_Delete
(
    @CategoryID int
)
AS
BEGIN TRY
  BEGIN TRANSACTION -- Start the transaction
  -- First, delete the associated products...
  DELETE FROM Products
  WHERE CategoryID = @CategoryID
  -- Now delete the category
  DELETE FROM Categories
  WHERE CategoryID = @CategoryID
  -- If we reach here, success!
  COMMIT TRANSACTION
END TRY
BEGIN CATCH 
  -- Whoops, there was an error
  ROLLBACK TRANSACTION
  -- Raise an error with the 
  -- details of the exception   
  DECLARE @ErrMsg nvarchar(4000),
          @ErrSeverity int 
  SELECT @ErrMsg = ERROR_MESSAGE(), 
         @ErrSeverity = ERROR_SEVERITY() 
 
  RAISERROR(@ErrMsg, @ErrSeverity, 1) 
END CATCH

Chvíli se dejte přidat uloženou Categories_Delete proceduru do databáze Northwind. Pokyny k přidání uložených procedur do databáze najdete v kroku 1.

Krok 6: AktualizaceCategoriesTableAdapter

Zatímco jsme přidali uloženou proceduru Categories_Delete do databáze, dal je aktuálně nakonfigurovaný tak, aby k provedení odstranění používal ad hoc příkazy SQL. Musíme aktualizovat CategoriesTableAdapter a dát mu pokyn, aby místo toho použil uloženou proceduru Categories_Delete .

Poznámka

Dříve v tomto kurzu jsme pracovali s datovou NorthwindWithSprocs sadou. Tato datová sada ale obsahuje pouze jednu entitu ProductsDataTable, a proto musíme pracovat s kategoriemi. Proto ve zbývající části tohoto kurzu, když mluvím o vrstvě přístupu k datům, mám na Northwind mysli DataSet, kterou jsme poprvé vytvořili v kurzu Vytvoření vrstvy přístupu k datům .

Otevřete sadu Northwind DataSet, vyberte CategoriesTableAdaptera přejděte na okno Vlastnosti. V okno Vlastnosti jsou uvedeny InsertCommand, UpdateCommand, DeleteCommanda SelectCommand používané objektem TableAdapter, stejně jako jeho název a informace o připojení. Rozbalením DeleteCommand vlastnosti zobrazíte její podrobnosti. Jak je znázorněno na obrázku DeleteCommand 15, vlastnost s CommandType je nastavená na Text, což dává pokyn k odeslání textu ve CommandText vlastnosti jako ad hoc dotazu SQL.

V Designer vyberte CategoriesTableAdapter a zobrazte jeho vlastnosti v okně Vlastnosti.

Obrázek 15: Výběrem CategoriesTableAdapter v Designer zobrazíte jeho vlastnosti v okně Vlastnosti.

Pokud chcete tato nastavení změnit, vyberte v okno Vlastnosti text (DeleteCommand) a v rozevíracím seznamu zvolte (Nový). Tím se vymažou nastavení vlastností CommandText, CommandTypea Parameters . Dále nastavte vlastnost na CommandTypeStoredProcedure a zadejte název uložené procedury pro CommandText (dbo.Categories_Delete). Pokud potřebujete zadat vlastnosti v tomto pořadí, nejprve CommandType sada Visual Studio a potom CommandText automaticky naplní kolekci Parameters. Pokud tyto vlastnosti nezadáte v tomto pořadí, budete muset parametry přidat ručně prostřednictvím kolekce parametrů Editor. V každém případě je vhodné kliknout na tři tečky ve vlastnosti Parametry a zobrazit kolekci parametrů Editor ověřit, zda byly provedeny správné změny nastavení parametrů (viz obrázek 16). Pokud se v dialogovém okně nezobrazí žádné parametry, přidejte @CategoryID parametr ručně (nemusíte ho @RETURN_VALUE přidávat).

Ujistěte se, že jsou nastavení parametrů správná.

Obrázek 16: Ujistěte se, že jsou nastavení parametrů správná

Po aktualizaci DAL se odstraněním kategorie automaticky odstraní všechny přidružené produkty, a to pod hlavičkou transakce. Pokud to chcete ověřit, vraťte se na stránku Aktualizace a odstranění existujících binárních dat a klikněte na tlačítko Odstranit u jedné z kategorií. Jedním kliknutím myši se kategorie a všechny přidružené produkty odstraní.

Poznámka

Před testováním Categories_Delete uložené procedury, která odstraní řadu produktů spolu s vybranou kategorií, může být rozumné vytvořit záložní kopii databáze. Pokud používáte databázi v App_Datanástroji NORTHWND.MDF , jednoduše zavřete sadu Visual Studio a zkopírujte soubory MDF a LDF do App_Data jiné složky. Po otestování funkčnosti můžete databázi obnovit zavřením sady Visual Studio a nahrazením aktuálních souborů MDF a LDF záložními App_Data kopiemi.

Souhrn

I když vám průvodce TableAdapter automaticky vygeneruje uložené procedury, může se stát, že takové uložené procedury už máme vytvořené nebo je budeme chtít vytvořit ručně nebo pomocí jiných nástrojů. Pro takové scénáře lze objekt TableAdapter také nakonfigurovat tak, aby odkazoval na existující uloženou proceduru. V tomto kurzu jsme se podívali na to, jak ručně přidat uložené procedury do databáze prostřednictvím prostředí sady Visual Studio a jak připojit metody TableAdapter k těmto uloženým procedurám. Prozkoumali jsme také příkazy T-SQL a vzor skriptů, které se používají ke spouštění, pověřování a vrácení transakcí z uložené procedury.

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

Zvláštní poděkování

Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Hlavními recenzenty tohoto kurzu byli Hilton Geisenow, S ren Jacob Lauritsen a Teresa Murphy. Chcete si projít moje nadcházející články na WEBU MSDN? Pokud ano, dejte mi čáru na mitchell@4GuysFromRolla.comadresu .