Debugowanie procedur składowanych (C#)

Autor : Scott Mitchell

Pobierz plik PDF

Visual Studio Professional i Team System edycji umożliwiają ustawianie punktów przerwania i przechodzenie do procedur składowanych w SQL Server, dzięki czemu debugowanie procedur składowanych jest tak proste, jak debugowanie 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 ASP.NET klasę za kodem lub klasę warstwy logiki biznesowej, więc można je również umieścić w procedurach składowanych.

W tym samouczku przyjrzymy się przechodzeniu do procedur składowanych z Poziomu Eksploratora serwera w programie Visual Studio oraz sposobu 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 zarządzane obiekty bazy danych. Oznacza to, że można tworzyć obiekty bazy danych, takie jak procedury składowane i funkcje User-Defined Functions (UDF) jako metody w klasie C#. Dzięki temu te procedury składowane i funkcje zdefiniowane przez użytkownika mogą korzystać 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 zarówno dla obiektów T-SQL, jak i zarządzanych baz danych. 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 omówiono debugowanie obiektów zarządzanej bazy danych.

Wpis w blogu języka T-SQL i debugowania CLR w programie SQL Server 2005 z zespołu integracji środowiska CLR z SQL Server 2005 r. 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 w przypadku debugowania aplikacji nie możemy 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ą typ SQL Server Project, 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 lokalnych i zdalnych wystąpieniach SQL Server. 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. Na potrzeby tych samouczków używaliśmy lokalnych wystąpień SQL Server. Debugowanie procedur składowanych w zdalnym wystąpieniu programu SQL Server wymaga wykonania większej liczby 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, najpierw należy się upewnić, ż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 nazwa logowania do bazy danych, jak i nazwa logowania bazy danych używana 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ępny jest tylko podzbiór okien debugowania, nie można użyć opcji Edytuj i kontynuuj, okno natychmiastowe jest renderowane bezużyteczne itd. 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 typów elementów TableAdapters). Zacznij od przejścia do Eksploratora serwera i rozwinięcia 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.

Użyj wartości 1 dla <span class=@CategoryID Parameter" />

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. Zwróć uwagę na żółtą strzałkę na marginesie wskazującą bieżącą lokalizację w procedurze składowanej. Wartości parametrów można wyświetlać i edytować za pomocą okna Czujka lub umieszczając wskaźnik myszy na nazwie parametru w procedurze składowanej.

Debuger zatrzymał się w pierwszej instrukcji procedury składowanej

Rysunek 2. Debuger zatrzymał się w pierwszej instrukcji procedury składowanej (kliknij, aby wyświetlić obraz w pełnym rozmiarze)

Aby przejść przez procedurę składowaną jedną instrukcję naraz, kliknij przycisk Przekrocznij 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 dane wyjściowe pojawią się 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 przejść do instrukcji SELECT .

Krok 2. Konfigurowanie witryny internetowej na potrzeby debugowania aplikacji

Debugowanie procedury składowanej bezpośrednio z Poziomu Eksploratora serwera jest przydatne, ale 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 oraz przejść przez jej instrukcje, tak jak w kroku 1.

Zanim zaczniemy debugować procedury składowane wywoływane z aplikacji, musimy poinstruować aplikację internetową ASP.NET, aby zintegrowała się z debugerem SQL Server. Zacznij od kliknięcia prawym przyciskiem myszy nazwy witryny internetowej w Eksplorator rozwiązań (ASPNET_Data_Tutorial_74_CS). Wybierz opcję Strony właściwości z menu kontekstowego, wybierz element Opcje uruchamiania po lewej stronie, a następnie zaznacz pole wyboru SQL Server w sekcji Debugery (zobacz Rysunek 3).

Zaznacz pole wyboru SQL Server na stronach właściwości aplikacji

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 zwiększeniem 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 NORTHWNDConnectionString element 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 pamiętaj o przywróceniu puli połączeń przez usunięcie Pooling ustawienia z parametry połączenia (lub ustawienie wartości ).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 podczas wywoływanych za pośrednictwem aplikacji internetowej. Teraz wystarczy dodać punkt przerwania do procedury składowanej i rozpocząć debugowanie.

Krok 3. Dodawanie punktu przerwania i debugowania

Otwórz procedurę Products_SelectByCategoryID składowaną i ustaw punkt przerwania na początku SELECT instrukcji, klikając margines w odpowiednim miejscu lub umieszczając kursor na początku SELECT instrukcji i naciskając klawisz F9. Jak pokazano na rysunku 4, punkt przerwania jest wyświetlany jako czerwony okrąg na marginesie.

Ustawianie punktu przerwania w procedurze składowanej Products_SelectByCategoryID

Rysunek 4. Ustawianie punktu przerwania w procedurze Products_SelectByCategoryID 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 rozsądne jest podwójne sprawdzenie. Kliknij prawym przyciskiem NORTHWND.MDF myszy węzeł w Eksploratorze serwera. Menu kontekstowe powinno zawierać zaznaczony element menu o nazwie Debugowanie aplikacji.

Upewnij się, że opcja debugowania aplikacji jest włączona

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.

Strona ExistingSprocs.aspx początkowo wyświetla napoje

Rysunek 6. Strona ExistingSprocs.aspx początkowo wyświetla napoje (kliknij, aby wyświetlić obraz pełnowymiarowy)

Osiągnięto punkt przerwania procedury składowanej

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.

Wybierz inną kategorię z listy Drop-Down

Rysunek 8. Wybierz inną kategorię z listy Drop-Down (kliknij, aby wyświetlić obraz pełnowymiarowy)

Parametr <span=@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.