Korzystanie z istniejących procedur składowanych dla elementów TableAdapter typizowanego zestawu danych (VB)
Autor : Scott Mitchell
W poprzednim samouczku dowiedzieliśmy się, jak używać Kreatora tableAdapter do generowania nowych procedur składowanych. Z tego samouczka 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 zobaczyliśmy, jak można skonfigurować klasy TableAdapters zestawu danych typed do używania procedur składowanych w celu uzyskiwania dostępu do danych, a nie do instrukcji ad hoc SQL. W szczególności zbadaliś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 istnieje prawdopodobieństwo, że baza danych zawiera już potrzebne procedury składowane. Alternatywnie możesz chcieć utworzyć procedury składowane ręcznie lub za pomocą narzędzia innego niż kreator TableAdapter, który automatycznie generuje procedury składowane.
W tym samouczku dowiesz się, jak skonfigurować metodę TableAdapter do korzystania z istniejących procedur składowanych. Ponieważ baza danych Northwind zawiera 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
, CommitTransaction
itd.). Alternatywnie transakcje można zarządzać w całości w ramach procedury składowanej, która nie wymaga 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 i tak dalej — 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 procedur składowanych i dodaj nową procedurę składowaną (kliknij, aby wyświetlić obraz w pełnym rozmiarze)
Jak pokazano na rysunku 1, wybranie opcji Dodaj nową procedurę składowaną powoduje otwarcie okna skryptu w programie Visual Studio z konspektem 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
typu int
) i zwraca wszystkie pola dla tych produktów o pasującej 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 tej czynności folder Procedury składowane zostanie odświeżyny, pokazujący 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ą. Od początku skryptu zmieniono wartość na ALTER PROCEDURE
, zmieniając parametry wejściowe procedur składowanych lub instrukcje SQL, a kliknięcie ikony Zapisz spowoduje zaktualizowanie procedury składowanej przy użyciu 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 w pełnym rozmiarze)
Krok 2. Konfigurowanie obiektu TableAdapter do używania 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 jej metod. W szczególności dodamy metodę do ProductsTableAdapter
elementu w typowym zestawie NorthwindWithSprocs
danych, który wywołuje właśnie utworzoną Products_SelectByCategoryID
procedurę GetProductsByCategoryID(<_i22_>categoryID)<!--_i22_-->
składowaną.
Zacznij od otwarcia zestawu NorthwindWithSprocs
danych. Kliknij prawym przyciskiem myszy ProductsTableAdapter
i wybierz polecenie Dodaj zapytanie, aby uruchomić kreatora konfiguracji kwerendy TableAdapter. W poprzednim samouczku postanowiliśmy utworzyć dla nas nową procedurę składowaną tableAdapter. Na potrzeby tego samouczka 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. Wybieranie opcji Użyj istniejącej procedury składowanej (kliknij, aby wyświetlić obraz o pełnym rozmiarze)
Poniższy ekran zawiera listę rozwijaną wypełniną procedurami składowanymi bazy danych. Wybranie procedury składowanej wyświetla parametry wejściowe 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 w pełnym rozmiarze)
Następny ekran pyta nas, jakiego rodzaju dane są zwracane przez procedurę składowaną, a nasza odpowiedź określa typ zwracany przez metodę TableAdapter. Jeśli na przykład wskazujemy, że zwracane są dane tabelaryczne, metoda zwróci ProductsDataTable
wystąpienie wypełnione rekordami zwróconymi przez procedurę składowaną. Natomiast jeśli wskazujemy, że ta procedura składowana zwraca pojedynczą wartość, funkcja TableAdapter zwróci wartość przypisaną Object
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 w pełnym rozmiarze)
Pozostaje tylko wskazać, jakie wzorce metod mają być używane, a następnie nazwy tych metod. Pozostaw zaznaczone opcje Fill a DataTable (Wypełnianie tabeli DataTable) i Return a DataTable (Zwracanie tabeli DataTable), 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 Integer
. 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, należy również zaktualizować parametry dla tych metod TableAdapter. Zgodnie z opisem 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 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 Function GetProductsByCategoryID(ByVal categoryID As Integer) _
As NorthwindWithSprocs.ProductsDataTable
Return Adapter.GetProductsByCategoryID(categoryID)
End Function
Ta metoda BLL po prostu zwraca ProductsDataTable
wartość zwróconą ProductsTableAdapter
z metody s GetProductsByCategoryID
. Atrybut DataObjectMethodAttribute
udostępnia metadane używane przez kreatora konfiguracji ź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ą i 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 kontrolka GridView wyświetli produkty należące do wybranej kategorii.
Uwaga
W poprzednich samouczkach utworzyliśmy interfejsy master/detail przy użyciu elementów DropDownLists. Aby uzyskać bardziej szczegółowe informacje na temat implementowania takiego raportu głównego/szczegółowego, zapoznaj się z samouczkiem Filtrowanie wzorca/szczegółów za pomocą listy rozwijanej.
ExistingSprocs.aspx
Otwórz stronę w folderze AdvancedDAL
i przeciągnij listę DropDownList z przybornika do Projektant. Dla właściwości DropDownList ID
ustaw Categories
właściwość i jej AutoPostBack
właściwość na True
. Następnie z tagu inteligentnego powiąż listę DropDownList z nową wartością 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 zakończeniu pracy kreatora ObjectDataSource skonfiguruj listę DropDownList, aby wyświetlić CategoryName
pole danych i użyć CategoryID
pola jako Value
dla każdego ListItem
elementu .
W tym momencie znaczniki deklaratywne dropDownList 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 obiekt GridView na Projektant, umieszczając go pod listą DropDownList. Ustaw właściwość GridView na ID
ProductsByCategory
i, z tagu inteligentnego, powiąż ją z nową wartością 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 Visual Basic 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 sprawdzona przez wielu pomocnych recenzentów. Recenzenci w tym samouczku byli Hilton Geisenow, S ren Jacob Lauritsen i Teresa Murphy. Chcesz przejrzeć nadchodzące artykuły MSDN? Jeśli tak, upuść mi wiersz pod adresem mitchell@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