Debugowanie procedur składowanych (VB)
Visual Studio Professional i Team System editions umożliwiają ustawianie punktów przerwania i przechodzenie do procedur składowanych w ramach SQL Server, co ułatwia debugowanie procedur składowanych podczas debugowania kodu aplikacji. W tym samouczku przedstawiono bezpośrednie debugowanie bazy danych i debugowanie aplikacji procedur składowanych.
Wprowadzenie
Program Visual Studio zapewnia zaawansowane środowisko debugowania. Za pomocą kilku naciśnięć klawiszy lub kliknięć myszy można użyć punktów przerwania, aby zatrzymać wykonywanie programu i zbadać jego stan i przepływ sterowania. Oprócz debugowania kodu aplikacji program Visual Studio oferuje obsługę debugowania procedur składowanych z poziomu SQL Server. Podobnie jak punkty przerwania można ustawić w kodzie klasy ASP.NET klasę za kodem lub klasę warstwy logiki biznesowej, aby można było je również umieścić w procedurach składowanych.
W tym samouczku przyjrzymy się krokowi procedur składowanych z Eksploratora serwera w programie Visual Studio oraz sposobom ustawiania punktów przerwania, które są osiągane, gdy procedura składowana jest wywoływana z uruchomionej aplikacji ASP.NET.
Uwaga
Niestety procedury składowane można wprowadzać i debugować tylko za pośrednictwem wersji Professional and Team Systems programu Visual Studio. Jeśli używasz programu Visual Web Developer lub standardowej wersji programu Visual Studio, możesz zapoznać się z instrukcjami niezbędnymi do debugowania procedur składowanych, ale nie będzie można replikować tych kroków na maszynie.
pojęcia dotyczące debugowania SQL Server
Firma Microsoft SQL Server 2005 została zaprojektowana w celu zapewnienia integracji ze środowiskiem Uruchomieniowym języka wspólnego (CLR), które jest środowiskiem uruchomieniowym używanym przez wszystkie zestawy platformy .NET. W związku z tym SQL Server 2005 obsługuje obiekty zarządzanej bazy danych. Oznacza to, że można tworzyć obiekty bazy danych, takie jak procedury składowane i funkcje User-Defined (UDF) jako metody w klasie Visual Basic. Dzięki temu te procedury składowane i funkcje zdefiniowane przez użytkownika umożliwiają korzystanie z funkcji w .NET Framework i z własnych klas niestandardowych. Oczywiście SQL Server 2005 zapewnia również obsługę obiektów bazy danych T-SQL.
SQL Server 2005 oferuje obsługę debugowania obiektów bazy danych T-SQL i zarządzanych. Te obiekty można jednak debugować tylko za pośrednictwem wersji Visual Studio 2005 Professional i Team Systems. W tym samouczku przeanalizujemy debugowanie obiektów bazy danych T-SQL. W kolejnym samouczku przedstawiono debugowanie zarządzanych obiektów bazy danych.
Omówienie debugowania języka T-SQL i CLR w wpisie w blogu SQL Server 2005 z SQL Server 2005 CLR Integration team wyróżnia trzy sposoby debugowania obiektów SQL Server 2005 z programu Visual Studio:
- Debugowanie bezpośredniej bazy danych (DDD) — w Eksploratorze serwera możemy przejść do dowolnego obiektu bazy danych T-SQL, takiego jak procedury składowane i funkcje zdefiniowane przez użytkownika. Przeanalizujemy DDD w kroku 1.
- Debugowanie aplikacji — możemy ustawić punkty przerwania w obiekcie bazy danych, a następnie uruchomić naszą aplikację ASP.NET. Po wykonaniu obiektu bazy danych punkt przerwania zostanie trafiony, a kontrolka zostanie przekazana do debugera. Należy pamiętać, że debugowanie aplikacji nie może przejść do obiektu bazy danych z kodu aplikacji. Musimy jawnie ustawić punkty przerwania w tych procedurach składowanych lub funkcjach zdefiniowanych przez użytkownika, w których chcemy zatrzymać debuger. Debugowanie aplikacji jest badane, począwszy od kroku 2.
- Debugowanie z SQL Server Project — wersje Visual Studio Professional i Team Systems obejmują SQL Server typ projektu, który jest często używany do tworzenia zarządzanych obiektów bazy danych. Przeanalizujemy użycie SQL Server Projects i debugujemy ich zawartość w następnym samouczku.
Program Visual Studio może debugować procedury składowane w wystąpieniach SQL Server lokalnych i zdalnych. Lokalne wystąpienie SQL Server to wystąpienie zainstalowane na tej samej maszynie co program Visual Studio. Jeśli używana baza danych SQL Server nie znajduje się na maszynie dewelopera, jest ona uznawana za wystąpienie zdalne. W przypadku tych samouczków używamy lokalnych wystąpień SQL Server. Debugowanie procedur składowanych w zdalnym wystąpieniu programu SQL Server wymaga więcej kroków konfiguracji niż podczas debugowania procedur składowanych w wystąpieniu lokalnym.
Jeśli używasz lokalnego wystąpienia SQL Server, możesz zacząć od kroku 1 i pracować z tym samouczkiem na końcu. Jeśli jednak używasz zdalnego wystąpienia SQL Server, musisz najpierw upewnić się, że podczas debugowania zalogowano się na komputerze deweloperskim przy użyciu konta użytkownika systemu Windows z SQL Server logowania w wystąpieniu zdalnym. Ponadto zarówno ta baza danych logowania, jak i identyfikator logowania bazy danych używany do nawiązywania połączenia z bazą danych z uruchomionej aplikacji ASP.NET muszą być członkami sysadmin
roli. Zobacz sekcję Debugowanie obiektów T-SQL Database w wystąpieniach zdalnych na końcu tego samouczka, aby uzyskać więcej informacji na temat konfigurowania programu Visual Studio i SQL Server debugowania wystąpienia zdalnego.
Na koniec należy zrozumieć, że obsługa debugowania obiektów bazy danych T-SQL nie jest tak rozbudowana, jak obsługa debugowania dla aplikacji platformy .NET. Na przykład warunki i filtry punktu przerwania nie są obsługiwane, dostępne są tylko podzbiór okien debugowania, nie można użyć opcji Edytuj i Kontynuuj, okno natychmiastowe jest renderowane bezużyteczne i tak dalej. Aby uzyskać więcej informacji, zobacz Ograniczenia dotyczące poleceń i funkcji debugera .
Krok 1. Bezpośrednie przechodzenie do procedury składowanej
Program Visual Studio ułatwia bezpośrednie debugowanie obiektu bazy danych. Przyjrzyjmy się, jak za pomocą funkcji debugowania bezpośredniej bazy danych (DDD) przejść do Products_SelectByCategoryID
procedury składowanej w bazie danych Northwind. Jak sama nazwa wskazuje, Products_SelectByCategoryID
zwraca informacje o produkcie dla określonej kategorii. Została utworzona w samouczku Using Existing Stored Procedures for the Typed DataSet s TableAdapters (Używanie istniejących procedur składowanych dla zestawu danych typu TableAdapters ). Zacznij od przejście do Eksploratora serwera i rozwinięcie węzła bazy danych Northwind. Następnie przejdź do folderu Procedury składowane, kliknij prawym przyciskiem myszy Products_SelectByCategoryID
procedurę składowaną i wybierz opcję Krok do procedury składowanej z menu kontekstowego. Spowoduje to uruchomienie debugera.
Products_SelectByCategoryID
Ponieważ procedura składowana oczekuje parametru wejściowego@CategoryID
, zostanie wyświetlony monit o podanie tej wartości. Wprowadź wartość 1, która zwróci informacje o napojach.
@CategoryID Parametr" />
Rysunek 1. Użyj wartości 1 dla parametru @CategoryID
Po podaniu wartości parametru @CategoryID
jest wykonywana procedura składowana. Zamiast uruchamiać polecenie do ukończenia, debuger zatrzymuje jednak wykonywanie w pierwszej instrukcji. Zanotuj żółtą strzałkę na marginesie wskazującą bieżącą lokalizację w procedurze składowanej. Wartości parametrów można wyświetlać i edytować w oknie Obserwowanie lub umieszczając wskaźnik myszy na nazwie parametru w procedurze składowanej.
Rysunek 2. Debuger zatrzymał się w pierwszej instrukcji procedury składowanej (kliknij, aby wyświetlić obraz pełnowymiarowy)
Aby przejść przez procedurę składowaną jedną instrukcję naraz, kliknij przycisk Krok po kroku na pasku narzędzi lub naciśnij klawisz F10. Procedura Products_SelectByCategoryID
składowana zawiera pojedynczą SELECT
instrukcję, więc naciśnięcie klawisza F10 spowoduje wykonanie pojedynczej instrukcji i wykonanie procedury składowanej. Po zakończeniu procedury składowanej jego dane wyjściowe zostaną wyświetlone w oknie Dane wyjściowe, a debuger zakończy działanie.
Uwaga
Debugowanie języka T-SQL odbywa się na poziomie instrukcji; Nie można wejść do instrukcji SELECT
.
Krok 2. Konfigurowanie witryny internetowej na potrzeby debugowania aplikacji
Podczas debugowania procedury składowanej bezpośrednio z Eksploratora serwera jest przydatne, w wielu scenariuszach bardziej interesuje nas debugowanie procedury składowanej, gdy jest wywoływana z naszej aplikacji ASP.NET. Możemy dodać punkty przerwania do procedury składowanej z poziomu programu Visual Studio, a następnie rozpocząć debugowanie aplikacji ASP.NET. Gdy procedura składowana z punktami przerwania jest wywoływana z aplikacji, wykonanie zostanie zatrzymane w punkcie przerwania i możemy wyświetlić i zmienić wartości parametrów procedury składowanej i przejść przez jej instrukcje, podobnie jak w kroku 1.
Zanim zaczniemy debugować procedury składowane wywoływane z aplikacji, musimy poinstruować aplikację internetową ASP.NET w celu zintegrowania z debugerem SQL Server. Zacznij od kliknięcia prawym przyciskiem myszy nazwy witryny internetowej w Eksplorator rozwiązań (ASPNET_Data_Tutorial_74_VB
). Wybierz opcję Strony właściwości z menu kontekstowego, wybierz element Opcje startowe po lewej stronie, a następnie zaznacz pole wyboru SQL Server w sekcji Debugers (zobacz Rysunek 3).
Rysunek 3. Zaznacz pole wyboru SQL Server na stronach właściwości aplikacji (kliknij, aby wyświetlić obraz pełnowymiarowy)
Ponadto musimy zaktualizować bazę danych parametry połączenia używaną przez aplikację, aby buforowanie połączeń było wyłączone. Po zamknięciu połączenia z bazą danych odpowiedni SqlConnection
obiekt jest umieszczany w puli dostępnych połączeń. Podczas nawiązywania połączenia z bazą danych można pobrać dostępny obiekt połączenia z tej puli, zamiast tworzyć i ustanawiać nowe połączenie. To buforowanie obiektów połączenia jest ulepszeniem wydajności i jest domyślnie włączone. Jednak podczas debugowania chcemy wyłączyć buforowanie połączeń, ponieważ infrastruktura debugowania nie została poprawnie ponownie utworzona podczas pracy z połączeniem pobranym z puli.
Aby wyłączyć buforowanie połączeń, zaktualizuj element NORTHWNDConnectionString
w pliku , Web.config
aby zawierał ustawienie 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>
Uwaga
Po zakończeniu debugowania SQL Server za pośrednictwem aplikacji ASP.NET należy przywrócić pulę połączeń, usuwając Pooling
ustawienie z parametry połączenia (lub ustawiając ją na Pooling=true
).
W tym momencie aplikacja ASP.NET została skonfigurowana tak, aby umożliwić programowi Visual Studio debugowanie obiektów bazy danych SQL Server po wywołaniu za pośrednictwem aplikacji internetowej. Wszystko, co pozostaje teraz, to dodać punkt przerwania do procedury składowanej i rozpocząć debugowanie!
Krok 3. Dodawanie punktu przerwania i debugowania
Products_SelectByCategoryID
Otwórz procedurę składowaną i ustaw punkt przerwania na początku instrukcji, klikając margines w odpowiednim miejscu lub umieszczając kursor na początku SELECT
SELECT
instrukcji i naciskając klawisz F9. Jak pokazano na rysunku 4, punkt przerwania jest wyświetlany jako czerwony okrąg na marginesie.
Rysunek 4. Ustawianie punktu przerwania w Products_SelectByCategoryID
procedurze składowanej (kliknij, aby wyświetlić obraz pełnowymiarowy)
Aby obiekt bazy danych SQL był debugowany za pośrednictwem aplikacji klienckiej, konieczne jest skonfigurowanie bazy danych do obsługi debugowania aplikacji. Po pierwszym ustawieniu punktu przerwania to ustawienie powinno być automatycznie włączone, ale rozważne jest dwukrotne sprawdzenie. Kliknij prawym przyciskiem myszy NORTHWND.MDF
węzeł w Eksploratorze serwera. Menu kontekstowe powinno zawierać zaznaczony element menu o nazwie Debugowanie aplikacji.
Rysunek 5. Upewnij się, że opcja debugowania aplikacji jest włączona
Po ustawieniu punktu przerwania i włączeniu opcji Debugowanie aplikacji możemy debugować procedurę składowaną po wywołaniu z aplikacji ASP.NET. Uruchom debuger, przechodząc do menu Debugowanie i wybierając pozycję Rozpocznij debugowanie, naciskając klawisz F5 lub klikając zieloną ikonę odtwarzania na pasku narzędzi. Spowoduje to uruchomienie debugera i uruchomienie witryny internetowej.
Procedura składowana została utworzona Products_SelectByCategoryID
w samouczku Using Existing Stored Procedures for the Typed DataSet s TableAdapters (Używanie istniejących procedur składowanych dla typów zestawów danych TableAdapters ). Odpowiednia strona sieci Web (~/AdvancedDAL/ExistingSprocs.aspx
) zawiera element GridView, który wyświetla wyniki zwrócone przez tę procedurę składowaną. Odwiedź tę stronę za pośrednictwem przeglądarki. Po dotarciu do strony punkt przerwania w Products_SelectByCategoryID
procedurze składowanej zostanie trafiony i zostanie zwrócona kontrolka do programu Visual Studio. Podobnie jak w kroku 1, można przejść przez instrukcje procedury składowanej i wyświetlić i zmodyfikować wartości parametrów.
Rysunek 6. Strona ExistingSprocs.aspx
początkowo wyświetla napoje (kliknij, aby wyświetlić obraz pełnowymiarowy)
Rysunek 7. Osiągnięto punkt przerwania procedury składowanej (kliknij, aby wyświetlić obraz pełnowymiarowy)
Jak pokazuje okno Obserwowanie na rysunku 7, wartość parametru @CategoryID
to 1. Wynika to z faktu, że ExistingSprocs.aspx
strona początkowo wyświetla produkty w kategorii napojów, która ma CategoryID
wartość 1. Wybierz inną kategorię z listy rozwijanej. Powoduje to powrót i ponownie wykonuje procedurę Products_SelectByCategoryID
składowaną. Punkt przerwania zostanie ponownie trafiony, ale tym razem @CategoryID
wartość parametru odzwierciedla wybrany element listy rozwijanej s CategoryID
.
Rysunek 8. Wybierz inną kategorię z listy Drop-Down (kliknij, aby wyświetlić obraz pełnowymiarowy)
@CategoryID odzwierciedla kategorię wybraną ze strony sieci Web" />
Rysunek 9. Parametr @CategoryID
odzwierciedla kategorię wybraną na stronie sieci Web (kliknij, aby wyświetlić obraz pełnowymiarowy)
Uwaga
Jeśli punkt przerwania w Products_SelectByCategoryID
procedurze składowanej nie zostanie trafiony podczas odwiedzania ExistingSprocs.aspx
strony, upewnij się, że pole wyboru SQL Server zostało zaewidencjonowane w sekcji Debugery strony właściwości aplikacji ASP.NET, ta pula połączeń została wyłączona i że opcja Debugowanie aplikacji bazy danych jest włączona. Jeśli nadal występują problemy, uruchom ponownie program Visual Studio i spróbuj ponownie.
Debugowanie obiektów T-SQL Database w wystąpieniach zdalnych
Debugowanie obiektów bazy danych za pomocą programu Visual Studio jest dość proste, gdy wystąpienie bazy danych SQL Server znajduje się na tej samej maszynie co program Visual Studio. Jeśli jednak SQL Server i Program Visual Studio znajdują się na różnych komputerach, wymagana jest staranna konfiguracja, aby wszystko działało prawidłowo. Istnieją dwa podstawowe zadania, z którymi mamy do czynienia:
- Upewnij się, że identyfikator logowania używany do nawiązywania połączenia z bazą danych za pośrednictwem ADO.NET należy do
sysadmin
roli. - Upewnij się, że konto użytkownika systemu Windows używane przez program Visual Studio na komputerze deweloperskim jest prawidłowym kontem logowania SQL Server należącym do
sysadmin
roli.
Pierwszy krok jest stosunkowo prosty. Najpierw zidentyfikuj konto użytkownika używane do nawiązywania połączenia z bazą danych z aplikacji ASP.NET, a następnie z SQL Server Management Studio dodaj to konto logowania do sysadmin
roli.
Drugie zadanie wymaga, aby konto użytkownika systemu Windows używane do debugowania aplikacji było prawidłowym logowaniem w zdalnej bazie danych. Jednak prawdopodobieństwo, że konto systemu Windows zalogowane na stacji roboczej nie jest prawidłowym logowaniem w SQL Server. Zamiast dodawać konkretne konto logowania do SQL Server, lepszym wyborem byłoby wyznaczenie konta użytkownika systemu Windows jako konta SQL Server debugowania. Następnie, aby debugować obiekty bazy danych zdalnego wystąpienia SQL Server, należy uruchomić program Visual Studio przy użyciu tych poświadczeń konta logowania systemu Windows.
Przykład powinien pomóc w wyjaśnieniu rzeczy. Załóżmy, że istnieje konto systemu Windows o nazwie SQLDebug
w domenie systemu Windows. To konto musi zostać dodane do zdalnego wystąpienia SQL Server jako prawidłowego identyfikatora logowania i jako członka sysadmin
roli. Następnie, aby debugować zdalne wystąpienie SQL Server z programu Visual Studio, musimy uruchomić program Visual Studio jako SQLDebug
użytkownik. Można to zrobić, wylogując się z naszej stacji roboczej, logując się ponownie jako SQLDebug
, a następnie uruchamiając program Visual Studio, ale prostszą metodą byłoby zalogowanie się do naszej stacji roboczej przy użyciu własnych poświadczeń, a następnie użyj polecenia runas.exe
, aby uruchomić program Visual Studio jako SQLDebug
użytkownik. runas.exe
umożliwia wykonanie określonej aplikacji pod pozorem innego konta użytkownika. Aby uruchomić program Visual Studio jako SQLDebug
, możesz wprowadzić następującą instrukcję w wierszu polecenia:
runas.exe /user:SQLDebug "%PROGRAMFILES%\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"
Aby uzyskać bardziej szczegółowe wyjaśnienie tego procesu, zobacz William R. Vaughn'sHitchhiker's Guide to Visual Studio and SQL Server, Seventh Edition.
Uwaga
Jeśli na komputerze deweloperskim jest uruchomiony system Windows XP z dodatkiem Service Pack 2, należy skonfigurować zaporę połączenia internetowego, aby umożliwić zdalne debugowanie. Artykuł How To: Enable SQL Server 2005 Debugowanie zauważa, że obejmuje to dwa kroki: (a) Na maszynie hosta programu Visual Studio należy dodać Devenv.exe
do listy Wyjątki i otworzyć port TCP 135; i (b) Na komputerze zdalnym (SQL) należy otworzyć port TCP 135 i dodać sqlservr.exe
go do listy Wyjątki. Jeśli zasady domeny wymagają komunikacji sieciowej za pośrednictwem protokołu IPSec, należy otworzyć porty UDP 4500 i UDP 500.
Podsumowanie
Oprócz zapewnienia obsługi debugowania kodu aplikacji platformy .NET program Visual Studio udostępnia również różne opcje debugowania dla SQL Server 2005. W tym samouczku omówiliśmy dwie z tych opcji: debugowanie bezpośredniej bazy danych i debugowanie aplikacji. Aby bezpośrednio debugować obiekt bazy danych T-SQL, znajdź obiekt za pośrednictwem Eksploratora serwera, a następnie kliknij go prawym przyciskiem myszy, a następnie wybierz pozycję Krok do. Spowoduje to uruchomienie debugera i zatrzymanie pierwszej instrukcji w obiekcie bazy danych, w którym można przejść przez instrukcje obiektu i wyświetlić i zmodyfikować wartości parametrów. W kroku 1 użyliśmy tego podejścia, aby przejść do Products_SelectByCategoryID
procedury składowanej.
Debugowanie aplikacji umożliwia ustawianie punktów przerwania bezpośrednio w obiektach bazy danych. Gdy obiekt bazy danych z punktami przerwania jest wywoływany z aplikacji klienckiej (takiej jak aplikacja internetowa ASP.NET), program zatrzymuje się, gdy debuger przejmuje. Debugowanie aplikacji jest przydatne, ponieważ wyraźniej pokazuje, jaka akcja aplikacji powoduje wywołanie określonego obiektu bazy danych. Jednak wymaga nieco więcej konfiguracji i konfiguracji niż debugowanie bezpośredniej bazy danych.
Obiekty bazy danych można również debugować za pomocą SQL Server Projects. Przyjrzymy się używaniu SQL Server Projects i sposobach ich używania do tworzenia i debugowania obiektów zarządzanej bazy danych w następnym samouczku.
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.