Korzystanie z istniejących procedur składowanych dla elementów TableAdapter typizowanego zestawu danych (C#)
W poprzednim samouczku dowiedzieliśmy się, jak za pomocą Kreatora tableAdapter wygenerować nowe procedury składowane. W tym samouczku dowiesz się, jak ten sam Kreator tableAdapter może pracować z istniejącymi procedurami składowanymi. Dowiesz się również, jak ręcznie dodać nowe procedury składowane do naszej bazy danych.
Wprowadzenie
W poprzednim samouczku pokazano, jak można skonfigurować klasy TableAdapters typed DataSet do używania procedur składowanych w celu uzyskania dostępu do danych, a nie instrukcji ad hoc SQL. W szczególności sprawdziliśmy, jak kreator TableAdapter automatycznie tworzy te procedury składowane. Podczas przenoszenia starszej aplikacji do ASP.NET 2.0 lub podczas tworzenia witryny internetowej ASP.NET 2.0 wokół istniejącego modelu danych prawdopodobieństwo, że baza danych zawiera już potrzebne procedury składowane. Alternatywnie możesz wolisz utworzyć procedury składowane ręcznie lub za pomocą innego narzędzia niż kreator TableAdapter, który automatycznie generuje procedury składowane.
W tym samouczku przyjrzymy się, jak skonfigurować narzędzie TableAdapter do korzystania z istniejących procedur składowanych. Ponieważ baza danych Northwind ma tylko niewielki zestaw wbudowanych procedur składowanych, przyjrzymy się również krokom wymaganym do ręcznego dodawania nowych procedur składowanych do bazy danych za pośrednictwem środowiska programu Visual Studio. Zacznijmy!
Uwaga
W samouczku opakowującym modyfikacje bazy danych w ramach transakcji dodaliśmy metody do klasy TableAdapter w celu obsługi transakcji (BeginTransaction
itd CommitTransaction
.). Alternatywnie transakcje mogą być zarządzane całkowicie w ramach procedury składowanej, która nie wymaga żadnych modyfikacji kodu warstwy dostępu do danych. W tym samouczku zapoznamy się z poleceniami języka T-SQL używanymi do wykonywania instrukcji procedury składowanej w zakresie transakcji.
Krok 1. Dodawanie procedur składowanych do bazy danych Northwind
Program Visual Studio ułatwia dodawanie nowych procedur składowanych do bazy danych. Dodajmy nową procedurę składowaną do bazy danych Northwind, która zwraca wszystkie kolumny z Products
tabeli dla tych, które mają określoną CategoryID
wartość. W oknie Eksplorator serwera rozwiń bazę danych Northwind, aby jej foldery — Diagramy bazy danych, tabele, widoki itd. — są wyświetlane. Jak pokazano w poprzednim samouczku, folder Procedury składowane zawiera istniejące procedury składowane bazy danych. Aby dodać nową procedurę składowaną, po prostu kliknij prawym przyciskiem myszy folder Procedury składowane i wybierz opcję Dodaj nową procedurę składowaną z menu kontekstowego.
Rysunek 1. Right-Click folder Procedury składowane i Dodaj nową procedurę składowaną (kliknij, aby wyświetlić obraz pełnowymiarowy)
Jak pokazano na rysunku 1, wybranie opcji Dodaj nową procedurę składowaną powoduje otwarcie okna skryptu w programie Visual Studio z konturem skryptu SQL potrzebnego do utworzenia procedury składowanej. Naszym zadaniem jest ułomienie tego skryptu i wykonanie go, w którym momencie procedura składowana zostanie dodana do bazy danych.
Wprowadź następujący skrypt:
CREATE PROCEDURE dbo.Products_SelectByCategoryID
(
@CategoryID int
)
AS
SELECT ProductID, ProductName, SupplierID, CategoryID,
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
ReorderLevel, Discontinued
FROM Products
WHERE CategoryID = @CategoryID
Ten skrypt, po wykonaniu, doda nową procedurę składowaną do bazy danych Northwind o nazwie Products_SelectByCategoryID
. Ta procedura składowana akceptuje pojedynczy parametr wejściowy (@CategoryID
typ int
) i zwraca wszystkie pola dla tych produktów z pasującą CategoryID
wartością.
Aby wykonać ten CREATE PROCEDURE
skrypt i dodać procedurę składowaną do bazy danych, kliknij ikonę Zapisz na pasku narzędzi lub naciśnij klawisze Ctrl+S. Po wykonaniu tego czynności folder Procedury składowane zostanie odświeżyny z nowo utworzoną procedurą składowaną. Ponadto skrypt w oknie zmieni subtelność z CREATE PROCEDURE dbo.Products_SelectProductByCategoryID
na ALTER PROCEDURE
dbo.Products_SelectProductByCategoryID
. CREATE PROCEDURE
Dodaje nową procedurę składowaną do bazy danych, a jednocześnie ALTER PROCEDURE
aktualizuje istniejącą. Ponieważ początek skryptu został zmieniony na ALTER PROCEDURE
, zmiana parametrów wejściowych procedur składowanych lub instrukcji SQL i kliknięcie ikony Zapisz spowoduje zaktualizowanie procedury składowanej za pomocą tych zmian.
Rysunek 2 przedstawia program Visual Studio po zapisaniu Products_SelectByCategoryID
procedury składowanej.
Rysunek 2. Procedura Products_SelectByCategoryID
składowana została dodana do bazy danych (kliknij, aby wyświetlić obraz pełnowymiarowy)
Krok 2. Konfigurowanie narzędzia TableAdapter do korzystania z istniejącej procedury składowanej
Teraz, gdy Products_SelectByCategoryID
procedura składowana została dodana do bazy danych, możemy skonfigurować warstwę dostępu do danych tak, aby korzystała z tej procedury składowanej po wywołaniu jednej z jego metod. W szczególności dodamy metodę do ProductsTableAdapter
elementu w typowym zestawie NorthwindWithSprocs
danych, który wywołuje właśnie utworzoną GetProductsByCategoryID(categoryID)
procedurę Products_SelectByCategoryID
składowaną.
Zacznij od otwarcia zestawu NorthwindWithSprocs
danych. Kliknij prawym przyciskiem myszy polecenie ProductsTableAdapter
i wybierz polecenie Dodaj zapytanie, aby uruchomić kreatora konfiguracji zapytań TableAdapter. W poprzednim samouczku postanowiliśmy utworzyć dla nas nową procedurę składowaną tableAdapter. W tym samouczku chcemy jednak połączyć nową metodę TableAdapter z istniejącą Products_SelectByCategoryID
procedurą składowaną. W związku z tym wybierz opcję Użyj istniejącej procedury składowanej w pierwszym kroku kreatora, a następnie kliknij przycisk Dalej.
Rysunek 3. Wybierz opcję Użyj istniejącej procedury składowanej (kliknij, aby wyświetlić obraz pełnowymiarowy)
Poniższy ekran zawiera listę rozwijaną wypełniną procedurami składowanymi bazy danych. Wybranie procedury składowanej zawiera listę parametrów wejściowych po lewej stronie, a pola danych zwrócone (jeśli istnieją) po prawej stronie. Wybierz procedurę Products_SelectByCategoryID
składowaną z listy i kliknij przycisk Dalej.
Rysunek 4. Wybierz procedurę Products_SelectByCategoryID
składowaną (kliknij, aby wyświetlić obraz o pełnym rozmiarze)
Następny ekran pyta nas, jakiego rodzaju dane są zwracane przez procedurę składowaną, a nasza odpowiedź tutaj określa typ zwracany przez metodę TableAdapter. Jeśli na przykład wskazujemy, że zwracane są dane tabelaryczne, metoda zwróci wystąpienie wypełnione rekordami zwróconymi przez procedurę ProductsDataTable
składowaną. Jeśli natomiast wskazujemy, że ta procedura składowana zwraca pojedynczą wartość, metoda TableAdapter zwróci object
wartość przypisaną w pierwszej kolumnie pierwszego rekordu zwróconego przez procedurę składowaną.
Products_SelectByCategoryID
Ponieważ procedura składowana zwraca wszystkie produkty należące do określonej kategorii, wybierz pierwszą odpowiedź — dane tabelaryczne — i kliknij przycisk Dalej.
Rysunek 5. Wskazuje, że procedura składowana zwraca dane tabelaryczne (kliknij, aby wyświetlić obraz pełnowymiarowy)
Pozostaje wskazać, jakie wzorce metod mają być używane, a następnie nazwy tych metod. Pozostaw zaznaczone opcje Fill a DataTable (Wypełnij tabelę danych) i Return a DataTable (Zwracanie tabeli danych), ale zmień nazwy metod na FillByCategoryID
i GetProductsByCategoryID
. Następnie kliknij przycisk Dalej, aby przejrzeć podsumowanie zadań wykonywanych przez kreatora. Jeśli wszystko wygląda poprawnie, kliknij przycisk Zakończ.
Rysunek 6. Nadaj metodom FillByCategoryID
nazwę i GetProductsByCategoryID
(kliknij, aby wyświetlić obraz pełnowymiarowy)
Uwaga
Właśnie utworzone FillByCategoryID
metody TableAdapter i GetProductsByCategoryID
, oczekują parametru wejściowego typu int
. Ta wartość parametru wejściowego jest przekazywana do procedury składowanej za pośrednictwem jego @CategoryID
parametru. Jeśli zmodyfikujesz Products_SelectByCategory
parametry procedury składowanej, musisz również zaktualizować parametry dla tych metod TableAdapter. Jak wspomniano w poprzednim samouczku, można to zrobić na jeden z dwóch sposobów: ręcznie dodając lub usuwając parametry z kolekcji parametrów lub ponownie uruchamiając kreatora TableAdapter.
Krok 3. DodawanieGetProductsByCategoryID(categoryID)
metody do usługi BLL
Po zakończeniu GetProductsByCategoryID
metody DAL następnym krokiem jest zapewnienie dostępu do tej metody w warstwie logiki biznesowej. ProductsBLLWithSprocs
Otwórz plik klasy i dodaj następującą metodę:
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public NorthwindWithSprocs.ProductsDataTable GetProductByCategoryID(int categoryID)
{
return Adapter.GetProductsByCategoryID(categoryID);
}
Ta metoda BLL po prostu zwraca zwrócone ProductsDataTable
z ProductsTableAdapter
metody s GetProductsByCategoryID
. Atrybut DataObjectMethodAttribute
udostępnia metadane używane przez Kreatora konfigurowania źródła danych objectDataSource. W szczególności ta metoda zostanie wyświetlona na liście rozwijanej kart SELECT.
Krok 4. Wyświetlanie produktów według kategorii
Aby przetestować nowo dodaną Products_SelectByCategoryID
procedurę składowaną oraz odpowiednie metody DAL i BLL, utwórzmy stronę ASP.NET zawierającą listę DropDownList i GridView. Lista rozwijana będzie zawierać listę wszystkich kategorii w bazie danych, podczas gdy element GridView wyświetli produkty należące do wybranej kategorii.
Uwaga
W poprzednich samouczkach utworzyliśmy interfejsy wzorca/szczegółów przy użyciu list DropDownList. Aby uzyskać bardziej szczegółowe informacje na temat implementowania takiego raportu wzorca/szczegółów, zapoznaj się z samouczkiem Master/Detail Filtering With a DropDownList (Filtrowanie wzorca/szczegółów za pomocą listy rozwijanej DropDownList ).
ExistingSprocs.aspx
Otwórz stronę w folderze AdvancedDAL
i przeciągnij listę DropDownList z przybornika na Projektant. Ustaw właściwość DropDownList ID
na Categories
i jej AutoPostBack
właściwość na true
. Następnie z tagu inteligentnego powiąż listę DropDownList z nowym obiektem ObjectDataSource o nazwie CategoriesDataSource
. Skonfiguruj obiekt ObjectDataSource, aby pobierał dane z CategoriesBLL
metody klasy .GetCategories
Ustaw listy rozwijane na kartach UPDATE, INSERT i DELETE na wartość (Brak).
Rysunek 7. Pobieranie danych z CategoriesBLL
metody klasy GetCategories
(kliknij, aby wyświetlić obraz pełnowymiarowy)
Rysunek 8. Ustawianie Drop-Down Listy na kartach UPDATE, INSERT i DELETE na wartość (Brak) (Kliknij, aby wyświetlić obraz o pełnym rozmiarze)
Po ukończeniu pracy kreatora ObjectDataSource skonfiguruj listę rozwijaną , aby wyświetlić CategoryName
pole danych i użyć CategoryID
pola jako Value
pola dla każdego ListItem
elementu .
Na tym etapie znaczniki deklaratywne listy rozwijanej i objectDataSource powinny wyglądać podobnie do następujących:
<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>
Następnie przeciągnij element GridView na Projektant, umieszczając go pod listą DropDownList. Ustaw element GridView na ID
ProductsByCategory
wartość i z tagu inteligentnego powiąż go z nowym obiektem ObjectDataSource o nazwie ProductsByCategoryDataSource
. Skonfiguruj obiekt ProductsByCategoryDataSource
ObjectDataSource do użycia ProductsBLLWithSprocs
klasy, pobierając dane przy użyciu GetProductsByCategoryID(categoryID)
metody . Ponieważ ten element GridView będzie używany tylko do wyświetlania danych, ustaw listy rozwijane na kartach UPDATE, INSERT i DELETE na wartość (Brak), a następnie kliknij przycisk Dalej.
Rysunek 9. Konfigurowanie obiektu ObjectDataSource do używania ProductsBLLWithSprocs
klasy (kliknij, aby wyświetlić obraz pełnowymiarowy)
Rysunek 10. Pobieranie danych z GetProductsByCategoryID(categoryID)
metody (kliknij, aby wyświetlić obraz pełnowymiarowy)
Metoda wybrana na karcie SELECT oczekuje parametru, więc ostatni krok kreatora monituje nas o źródło parametru. Ustaw listę rozwijaną Źródło parametrów na Kontrolkę i wybierz kontrolkę Categories
z listy rozwijanej ControlID. Kliknij przycisk Zakończ, aby zakończyć kreatora.
Rysunek 11. Użyj listy Categories
rozwijanej jako źródła parametru categoryID
(kliknij, aby wyświetlić obraz pełnowymiarowy)
Po ukończeniu pracy kreatora ObjectDataSource program Visual Studio doda pola BoundFields i pole CheckBoxField dla każdego pola danych produktu. Możesz dostosować te pola zgodnie z potrzebami.
Odwiedź stronę za pośrednictwem przeglądarki. Podczas odwiedzania strony wybrano kategorię Napoje i odpowiednie produkty wymienione w siatce. Zmiana listy rozwijanej na alternatywną kategorię, jak pokazano na rysunku 12, powoduje powrót i ponowne załadowanie siatki z produktami nowo wybranej kategorii.
Rysunek 12. Wyświetlane są produkty w kategorii produkcji (kliknij, aby wyświetlić obraz pełnowymiarowy)
Krok 5. Zawijanie instrukcji procedury składowanej w zakresie transakcji
W samouczku opakowującym modyfikacje bazy danych w ramach transakcji omówiliśmy techniki wykonywania serii instrukcji modyfikacji bazy danych w zakresie transakcji. Pamiętaj, że modyfikacje wykonywane pod parasolem transakcji albo wszystkie powodzenie, czy wszystkie niepowodzenia, gwarantując niepodzielność. Techniki używania transakcji obejmują:
- Używanie klas w
System.Transactions
przestrzeni nazw - Warstwa dostępu do danych używa klas ADO.NET, takich jak
SqlTransaction
, i - Dodawanie poleceń transakcji języka T-SQL bezpośrednio w procedurze składowanej
Samouczek opakowujące modyfikacje bazy danych w ramach transakcji używał klas ADO.NET w usłudze DAL. W pozostałej części tego samouczka przedstawiono sposób zarządzania transakcją przy użyciu poleceń języka T-SQL z poziomu procedury składowanej.
Trzy kluczowe polecenia SQL do ręcznego uruchamiania, zatwierdzania i wycofywania transakcji to BEGIN TRANSACTION
, COMMIT TRANSACTION
i ROLLBACK TRANSACTION
, odpowiednio. Podobnie jak w przypadku podejścia ADO.NET, w przypadku korzystania z transakcji z procedury składowanej musimy zastosować następujący wzorzec:
- Wskazuje początek transakcji.
- Wykonaj instrukcje SQL, które składają się na transakcję.
- Jeśli w jednej z instrukcji z kroku 2 wystąpi błąd, wycofaj transakcję
- Jeśli wszystkie instrukcje z kroku 2 zakończą się bez błędu, zatwierdź transakcję.
Ten wzorzec można zaimplementować w składni języka T-SQL przy użyciu następującego szablonu:
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
Szablon rozpoczyna się od zdefiniowania TRY...CATCH
bloku, konstrukcji nowej do SQL Server 2005 roku. Podobnie jak w przypadku try...catch
bloków w języku C#, blok SQL TRY...CATCH
wykonuje instrukcje w TRY
bloku. Jeśli jakakolwiek instrukcja zgłasza błąd, kontrolka zostanie natychmiast przeniesiona do CATCH
bloku.
Jeśli nie ma żadnych błędów podczas wykonywania instrukcji SQL, które makijażu transakcji, COMMIT TRANSACTION
instrukcja zatwierdza zmiany i kończy transakcję. Jeśli jednak jedna z instrukcji powoduje błąd, ROLLBACK TRANSACTION
blok w CATCH
bloku zwraca bazę danych do stanu przed rozpoczęciem transakcji. Procedura składowana zgłasza również błąd przy użyciu polecenia RAISERROR, co powoduje, że element SqlException
zostanie zgłoszony w aplikacji.
Uwaga
TRY...CATCH
Ponieważ blok jest nowy do SQL Server 2005 r., powyższy szablon nie będzie działać, jeśli używasz starszych wersji usługi Microsoft SQL Server.
Przyjrzyjmy się konkretnego przykładu. Ograniczenie klucza obcego istnieje między tabelami Categories
i Products
, co oznacza, że każde CategoryID
pole w Products
tabeli musi mapować na CategoryID
wartość w Categories
tabeli. Wszelkie działania, które naruszają to ograniczenie, takie jak próba usunięcia kategorii, która ma skojarzone produkty, powoduje naruszenie ograniczenia klucza obcego. Aby to sprawdzić, przejdź ponownie do przykładu Aktualizowanie i usuwanie istniejących danych binarnych w sekcji Praca z danymi binarnymi (~/BinaryData/UpdatingAndDeleting.aspx
). Ta strona zawiera listę każdej kategorii w systemie wraz z przyciskami Edytuj i Usuń (zobacz Rysunek 13), ale jeśli próbujesz usunąć kategorię, która ma skojarzone produkty — takie jak Napoje — usuwanie kończy się niepowodzeniem z powodu naruszenia ograniczeń klucza obcego (patrz Rysunek 14).
Rysunek 13. Każda kategoria jest wyświetlana w widoku GridView z przyciskami edycji i usuwania (kliknij, aby wyświetlić obraz pełnowymiarowy)
Rysunek 14. Nie można usunąć kategorii z istniejącymi produktami (kliknij, aby wyświetlić obraz pełnowymiarowy)
Załóżmy jednak, że chcemy zezwolić na usunięcie kategorii niezależnie od tego, czy mają skojarzone produkty. Jeśli kategoria z produktami zostanie usunięta, wyobraź sobie, że chcemy również usunąć swoje istniejące produkty (chociaż inną opcją byłoby po prostu ustawienie jego wartości produktów CategoryID
na NULL
wartość ). Tę funkcję można zaimplementować za pomocą kaskadowych reguł ograniczenia klucza obcego. Alternatywnie możemy utworzyć procedurę składowaną @CategoryID
, która akceptuje parametr wejściowy, a po wywołaniu jawnie usuwa wszystkie skojarzone produkty, a następnie określoną kategorię.
Nasza pierwsza próba przeprowadzenia takiej procedury składowanej może wyglądać następująco:
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
Chociaż na pewno usunie to skojarzone produkty i kategorię, nie robi to pod parasolem transakcji. Wyobraź sobie, że istnieje inne ograniczenie Categories
klucza obcego, które uniemożliwiłoby usunięcie określonej @CategoryID
wartości. Problem polega na tym, że w takim przypadku wszystkie produkty zostaną usunięte przed podjęciem próby usunięcia kategorii. Wynikiem netto jest to, że w przypadku takiej kategorii ta procedura składowana usunie wszystkie swoje produkty, podczas gdy kategoria pozostała, ponieważ nadal ma powiązane rekordy w innej tabeli.
Jeśli procedura składowana została opakowana w zakresie transakcji, jednak usunięcia do Products
tabeli zostaną wycofane w obliczu nieudanego usunięcia w systemie Categories
. Następujący skrypt procedury składowanej używa transakcji w celu zapewnienia niepodzielności między dwiema DELETE
instrukcjami:
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
Poświęć chwilę, aby dodać procedurę Categories_Delete
składowaną do bazy danych Northwind. Zapoznaj się z krokiem 1, aby uzyskać instrukcje dotyczące dodawania procedur składowanych do bazy danych.
Krok 6. Aktualizowanie elementuCategoriesTableAdapter
Mimo że dodaliśmy procedurę Categories_Delete
składowaną do bazy danych, usługa DAL jest obecnie skonfigurowana do używania instrukcji AD-hoc SQL do wykonania usunięcia. Musimy zaktualizować element CategoriesTableAdapter
i poinstruować go, aby zamiast tego korzystała z Categories_Delete
procedury składowanej.
Uwaga
Wcześniej w tym samouczku pracowaliśmy z zestawem NorthwindWithSprocs
danych. Jednak ten zestaw danych ma tylko jedną jednostkę , ProductsDataTable
i musimy pracować z kategoriami. W związku z tym w pozostałej części tego samouczka, kiedy mówię o warstwie dostępu do danych, którą odwołujem się do Northwind
zestawu danych, czyli tego, który został utworzony po raz pierwszy w samouczku Tworzenie warstwy dostępu do danych .
Otwórz element Northwind DataSet, wybierz CategoriesTableAdapter
element i przejdź do okno Właściwości. Okno Właściwości zawiera listę InsertCommand
, , UpdateCommand
DeleteCommand
i SelectCommand
używanych przez tableAdapter, a także jego nazwę i informacje o połączeniu. Rozwiń właściwość, DeleteCommand
aby wyświetlić jej szczegóły. Jak pokazano na rysunku CommandText
15, DeleteCommand
właściwość s CommandType
jest ustawiona na Tekst, co powoduje wysłanie tekstu we właściwości jako zapytanie ad hoc SQL.
Rysunek 15. Wybierz CategoriesTableAdapter
element w Projektant, aby wyświetlić jego właściwości w oknie Właściwości
Aby zmienić te ustawienia, wybierz tekst (DeleteCommand) w okno Właściwości i wybierz pozycję (Nowy) z listy rozwijanej. Spowoduje to wyczyszczenie ustawień właściwości CommandText
, CommandType
i Parameters
. Następnie ustaw CommandType
właściwość na StoredProcedure
, a następnie wpisz nazwę procedury składowanej (CommandText
dbo.Categories_Delete
). Jeśli upewnij się, że wprowadzisz właściwości w tej kolejności — najpierw polecenie CommandType
, a następnie CommandText
— Program Visual Studio automatycznie wypełni kolekcję Parametry. Jeśli nie wprowadzisz tych właściwości w tej kolejności, musisz ręcznie dodać parametry za pomocą kolekcji parametrów Redaktor. W obu przypadkach rozważne jest kliknięcie wielokropka we właściwości Parameters w celu wyświetlenia kolekcji parametrów Redaktor w celu sprawdzenia, czy wprowadzono prawidłowe zmiany ustawień parametrów (patrz Rysunek 16). Jeśli w oknie dialogowym nie widzisz żadnych parametrów, dodaj @CategoryID
parametr ręcznie (nie musisz dodawać parametru @RETURN_VALUE
).
Rysunek 16. Upewnij się, że ustawienia parametrów są poprawne
Po zaktualizowaniu dal usunięcie kategorii spowoduje automatyczne usunięcie wszystkich skojarzonych produktów i zrobienie tego pod parasolem transakcji. Aby to sprawdzić, wróć do strony Aktualizowanie i usuwanie istniejących danych binarnych, a następnie kliknij przycisk Usuń dla jednej z kategorii. Po jednym kliknięciu myszy kategoria i wszystkie skojarzone z nią produkty zostaną usunięte.
Uwaga
Przed przetestowaniem Categories_Delete
procedury składowanej, która usunie wiele produktów wraz z wybraną kategorią, warto utworzyć kopię zapasową bazy danych. Jeśli używasz NORTHWND.MDF
bazy danych w programie App_Data
, po prostu zamknij program Visual Studio i skopiuj pliki MDF i LDF do App_Data
innego folderu. Po przetestowaniu funkcji można przywrócić bazę danych, zamykając program Visual Studio i zastępując bieżące pliki MDF i LDF w kopiach App_Data
zapasowych.
Podsumowanie
Podczas gdy kreator TableAdapter automatycznie wygeneruje procedury składowane dla nas, istnieją czasy, w których możemy już utworzyć takie procedury składowane lub chcieć je utworzyć ręcznie lub za pomocą innych narzędzi. Aby obsłużyć takie scenariusze, można również skonfigurować metodę TableAdapter tak, aby wskazywała istniejącą procedurę składowaną. W tym samouczku przedstawiono sposób ręcznego dodawania procedur składowanych do bazy danych za pośrednictwem środowiska programu Visual Studio oraz sposobu podłącznia metod TableAdapter do tych procedur składowanych. Zbadaliśmy również polecenia języka T-SQL i wzorzec skryptu używane do uruchamiania, zatwierdzania i wycofywania transakcji z poziomu procedury składowanej.
Szczęśliwe programowanie!
Informacje o autorze
Scott Mitchell, autor siedmiu książek ASP/ASP.NET i założyciel 4GuysFromRolla.com, współpracuje z technologiami internetowymi firmy Microsoft od 1998 roku. Scott pracuje jako niezależny konsultant, trener i pisarz. Jego najnowsza książka to Sams Teach Yourself ASP.NET 2.0 w ciągu 24 godzin. Można do niego dotrzeć pod adresem mitchell@4GuysFromRolla.com. Lub za pośrednictwem swojego bloga, który można znaleźć na stronie http://ScottOnWriting.NET.
Specjalne podziękowania
Ta seria samouczków została przejrzyona przez wielu przydatnych recenzentów. Głównymi recenzentami tego samouczka byli Hilton Geisenow, S ren Jacob Lauritsen i Teresa Murphy. Chcesz przejrzeć nadchodzące artykuły MSDN? Jeśli tak, upuść mi wiersz pod adresemmitchell@4GuysFromRolla.com .
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla