Отладка хранимых процедур (C#)

по Скотт Митчелл

Скачать код или скачать PDF

Visual Studio Professional и выпуски Team System позволяют устанавливать точки останова и переходить к хранимым процедурам в SQL Server, что позволяет выполнять отладку хранимых процедур так же просто, как отладка кода приложения. В этом учебнике демонстрируется Непосредственная отладка базы данных и отладка приложений для хранимых процедур.

Введение

Visual Studio предоставляет широкие возможности для отладки. С помощью нескольких клавиш или щелчков мыши можно использовать точки останова для остановки выполнения программы и изучения ее состояния и потока управления. Наряду с отладкой кода приложения Visual Studio предлагает поддержку для отладки хранимых процедур из SQL Server. Точно так же, как точки останова, можно задать в коде класса кода программной части ASP.NET или класса уровня бизнес-логики, так что они также могут размещаться в хранимых процедурах.

В этом учебнике мы рассмотрим пошаговое выполнение хранимых процедур из обозреватель сервера в Visual Studio, а также как задать точки останова, которые будут достигнуты при вызове хранимой процедуры из работающего приложения ASP.NET.

Note

К сожалению, хранимые процедуры можно пошагово и отлаживать только с помощью версий Visual Studio Professional и Team Systems. Если вы используете Visual Web Developer или стандартную версию Visual Studio, вы можете ознакомиться с шагами, необходимыми для отладки хранимых процедур, но вы не сможете реплицировать эти действия на компьютере.

Основные понятия отладки SQL Server

Microsoft SQL Server 2005 была разработана для обеспечения интеграции со средой CLR, котораяиспользуется всеми сборками .NET. Следовательно, SQL Server 2005 поддерживает управляемые объекты базы данных. Таким образом, можно создавать объекты базы данных, такие как хранимые процедуры и определяемые пользователем функции (UDF), C# в качестве методов в классе. Это позволяет этим хранимым процедурам и функциям UDF использовать функции в .NET Framework и из собственных пользовательских классов. Конечно, SQL Server 2005 также обеспечивает поддержку объектов базы данных T-SQL.

SQL Server 2005 предлагает поддержку отладки как для T-SQL, так и для управляемых объектов базы данных. Однако эти объекты можно отлаживать только с помощью выпусков Visual Studio 2005 Professional и Team Systems. В этом учебнике мы рассмотрим отладку объектов базы данных T-SQL. В следующем учебнике рассматривается отладка управляемых объектов базы данных.

Общие сведения об отладке T-SQL и CLR в записи блога SQL Server 2005 из группы интеграции SQL Server 2005 CLR выделяют три способа отладки объектов SQL Server 2005 из Visual Studio:

  • Прямая отладка базы данных (DDD) — начиная с обозреватель сервера можно выполнить шаг с заходом в любой объект базы данных T-SQL, например хранимые процедуры и UDF. Мы рассмотрим DDD на шаге 1.
  • Отладка приложений . можно задать точки останова в объекте базы данных, а затем запустить приложение ASP.NET. При выполнении объекта базы данных происходит попадание в точку останова и управление переключается на отладчик. Обратите внимание, что при отладке приложения не удается выполнить шаг с заходом в объект базы данных из кода приложения. Необходимо явным образом задать точки останова в этих хранимых процедурах или функциях UDF, где отладчик должен останавливаться. Отладка приложения проверяется, начиная с шага 2.
  • Отладка SQL Server выпусков проекта Visual Studio Professional и Team Systems включает тип проекта SQL Server, который обычно используется для создания управляемых объектов базы данных. В следующем руководстве мы рассмотрим использование проектов SQL Server и отладку их содержимого.

Visual Studio может выполнять отладку хранимых процедур на локальном и удаленном экземплярах SQL Server. Локальный экземпляр SQL Server — это тот, который устанавливается на том же компьютере, что и Visual Studio. Если используемая база данных SQL Server не находится на компьютере разработки, она считается удаленным экземпляром. Для этих руководств мы использовали локальные экземпляры SQL Server. Отладка хранимых процедур на удаленном экземпляре SQL Server требует больше этапов настройки, чем при отладке хранимых процедур на локальном экземпляре.

Если вы используете локальный экземпляр SQL Server, можно начать с шага 1 и выполнить действия, описанные в этом руководстве, до конца. Однако если вы используете удаленный экземпляр SQL Server, то сначала необходимо убедиться, что при отладке на компьютере разработки будет использоваться учетная запись пользователя Windows с SQL Server именем входа на удаленном экземпляре. Кроме того, имя входа базы данных и имя входа базы данных, используемые для подключения к базе данных из работающего приложения ASP.NET, должны быть членами роли sysadmin. Дополнительные сведения о настройке Visual Studio и SQL Server для отладки удаленного экземпляра см. в разделе Отладка объектов базы данных T-SQL в удаленных экземплярах в конце этого руководства.

Наконец, следует понимать, что поддержка отладки для объектов базы данных T-SQL не так обширна, как поддержка отладки для приложений .NET. Например, условия точки останова и фильтры не поддерживаются, доступно только подмножество окон отладки, нельзя использовать "изменить и продолжить", окно интерпретации подготавливается к просмотру бесполезным и т. д. Дополнительные сведения см. в разделе ограничения на команды и функции отладчика .

Шаг 1. Непосредственная пошаговая отладка хранимой процедуры

Visual Studio упрощает прямую отладку объекта базы данных. Давайте рассмотрим, как использовать функцию прямой отладки базы данных (DDD) для пошагового перехода к Products_SelectByCategoryID хранимой процедуры в базе данных Northwind. Как следует из названия, Products_SelectByCategoryID возвращает сведения о продукте для определенной категории. Он был создан в учебнике использование существующих хранимых процедур для адаптеров таблиц типизированного набора данных s . Для начала перейдите к обозреватель сервера и разверните узел базы данных Northwind. Затем перейдите в папку хранимых процедур, щелкните правой кнопкой мыши хранимую процедуру Products_SelectByCategoryID и выберите пункт Шаг с хранимой процедурой в контекстном меню. Запустится отладчик.

Так как хранимая процедура Products_SelectByCategoryID предполагает, что @CategoryID входной параметр, нам будет предложено предоставить это значение. Введите 1, чтобы получить сведения о напитки.

Используйте значение 1 для параметра @CategoryID

Рис. 1. Использование значения 1 для параметра @CategoryID

После предоставления значения для параметра @CategoryID выполняется хранимая процедура. Однако вместо выполнения до завершения отладчик останавливает выполнение на первой инструкции. Обратите внимание на желтую стрелку на поле, указывающую текущее место в хранимой процедуре. Значения параметров можно просматривать и изменять с помощью окно контрольных значений или путем наведения указателя мыши на имя параметра в хранимой процедуре.

отладчик остановлен на первом операторе хранимой процедуры

Рис. 2. Отладчик остановлен на первом операторе хранимой процедуры (щелкните, чтобы просмотреть изображение с полным размером)

Для пошагового выполнения хранимой процедуры по одной инструкции нажмите кнопку Шаг с обходом на панели инструментов или нажмите клавишу F10. Products_SelectByCategoryID хранимая процедура содержит одну инструкцию SELECT, поэтому нажатие клавиши F10 приведет к пошаговому выполнению одной инструкции и завершению выполнения хранимой процедуры. После завершения хранимой процедуры ее выходные данные отобразятся в окне вывод, и отладчик завершит работу.

Note

Отладка T-SQL происходит на уровне инструкций. невозможно выполнить шаг с заходом в инструкцию SELECT.

Шаг 2. Настройка веб-сайта для отладки приложения

Хотя Отладка хранимой процедуры непосредственно из обозреватель сервера удобна, во многих сценариях мы заинтересованы в отладке хранимой процедуры при ее вызове из нашего приложения ASP.NET. Можно добавить точки останова в хранимую процедуру из среды Visual Studio, а затем начать отладку приложения ASP.NET. Если в приложении вызывается хранимая процедура с точками останова, выполнение будет остановлено в точке останова, и мы можем просмотреть и изменить значения параметров хранимой процедуры и пошагово выполнить инструкции, как в шаге 1.

Прежде чем можно будет начать отладку хранимых процедур, вызываемых из приложения, необходимо указать веб-приложению ASP.NET интегрироваться с отладчиком SQL Server. Начните с щелчка правой кнопкой мыши по имени веб-сайта в обозреватель решений (ASPNET_Data_Tutorial_74_CS). Выберите параметр страницы свойств в контекстном меню, выберите элемент Параметры запуска слева и установите флажок SQL Server в разделе отладчики (см. рис. 3).

установите флажок SQL Server на страницах свойств приложения.

Рис. 3. Установка флажка SQL Server на страницах свойств приложения (щелкните, чтобы просмотреть изображение с полным размером)

Кроме того, необходимо обновить строку подключения к базе данных, используемую приложением, чтобы отключить пул соединений. При закрытии соединения с базой данных соответствующий объект SqlConnection помещается в пул доступных подключений. При установлении соединения с базой данных доступный объект подключения можно получить из пула, а не создавать и устанавливать новое соединение. Такое объединение объектов соединения является улучшением производительности и включено по умолчанию. Однако при отладке мы хотим отключить пулы соединений, так как инфраструктура отладки неправильно восстанавливается при работе с подключением, полученным из пула.

Чтобы отключить пулы подключений, обновите NORTHWNDConnectionString в Web.config, чтобы она включала параметр 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>

Note

Завершив отладку SQL Server с помощью приложения ASP.NET, не забудьте восстановить пулы соединений, удалив параметр Pooling из строки подключения (или задав для него значение Pooling=true).

На этом этапе приложение ASP.NET настроено так, чтобы позволить Visual Studio выполнять отладку SQL Server объектов базы данных при вызове через веб-приложение. Теперь остается только добавить точку останова в хранимую процедуру и начать отладку.

Шаг 3. Добавление точки останова и отладки

Откройте Products_SelectByCategoryID хранимую процедуру и установите точку останова в начале SELECT, щелкнув поле в соответствующем месте или поместив курсор в начало оператора SELECT и нажав клавишу F9. Как показано на рис. 4, точка останова отображается в виде красного круга в поле.

установки точки останова в хранимой процедуре Products_SelectByCategoryID

Рис. 4. Установка точки останова в хранимой процедуре Products_SelectByCategoryID (щелкните, чтобы просмотреть изображение с полным размером)

Чтобы объект базы данных SQL можно было отлаживать через клиентское приложение, необходимо настроить для базы данных поддержку отладки приложений. При первом задании точки останова этот параметр должен автоматически переключаться, но рекомендуется выполнить двойную проверку. Щелкните правой кнопкой мыши узел NORTHWND.MDF в обозреватель сервера. Контекстное меню должно включать отмеченный элемент меню с именем Отладка приложения.

Убедитесь, что включен параметр отладки приложения.

Рис. 5. Убедитесь, что включен параметр отладки приложения

Если установлена точка останова и включен параметр Отладка приложения, мы готовы к отладке хранимой процедуры при вызове из приложения ASP.NET. Запустите отладчик, перейдя в меню Отладка и выбрав начать отладку, нажав клавишу F5 или щелкнув зеленый значок воспроизведения на панели инструментов. Это приведет к запуску отладчика и запуску веб-сайта.

Products_SelectByCategoryID хранимая процедура была создана в учебнике использование существующих хранимых процедур для адаптеров TableAdapter типизированного набора данных s . Соответствующая веб-страница (~/AdvancedDAL/ExistingSprocs.aspx) содержит GridView, в котором отображаются результаты, возвращаемые этой хранимой процедурой. Посетите эту страницу в браузере. При достижении страницы точка останова в Products_SelectByCategoryID хранимой процедуре будет нажата и управление возвращается в Visual Studio. Как и на шаге 1, можно пошагово выполнить инструкции хранимой процедуры s и просмотреть и изменить значения параметров.

страница Ексистингспрокс. aspx изначально отображает напитки

Рис. 6. страница ExistingSprocs.aspx изначально отображает напитки (щелкните, чтобы просмотреть изображение с полным размером)

достигнута точка останова хранимой процедуры

Рис. 7. достигнута точка останова хранимой процедуры (щелкните, чтобы просмотреть изображение с полным размером)

Как показано окно контрольных значений на рис. 7, значение параметра @CategoryID равно 1. Это связано с тем, что страница ExistingSprocs.aspx изначально отображает продукты в категории «напитки», которая имеет CategoryID значение 1. Выберите другую категорию из раскрывающегося списка. Это вызывает обратную передачу и повторно выполняет хранимую процедуру Products_SelectByCategoryID. Точка останова снова будет достигнута, но на этот раз значение параметра @CategoryID s отражает выбранный CategoryIDэлемент раскрывающегося списка.

выбрать другую категорию из раскрывающегося списка

Рис. 8. Выбор другой категории из раскрывающегося списка (щелкните, чтобы просмотреть изображение с полным размером)

параметр @CategoryID отражает категорию, выбранную на веб-странице

Рис. 9. параметр @CategoryID отражает категорию, выбранную на веб-странице (щелкните, чтобы просмотреть изображение с полным размером)

Note

Если точка останова в Products_SelectByCategoryID хранимой процедуре не достигается при посещении страницы ExistingSprocs.aspx, убедитесь, что флажок SQL Server установлен в разделе отладчики страницы свойств приложения ASP.NET, что пулы соединений отключены и включен параметр отладки приложений базы данных. Если проблемы не исчезли, перезапустите Visual Studio и повторите попытку.

Отладка объектов базы данных T-SQL на удаленных экземплярах

Отладка объектов базы данных с помощью Visual Studio довольно проста, если SQL Server экземпляр базы данных находится на том же компьютере, что и Visual Studio. Тем не менее, если SQL Server и Visual Studio находятся на разных компьютерах, то для правильной работы все должно быть достаточно тщательной настройки. Существует две основные задачи, с которыми мы столкнулись:

  • Убедитесь, что имя входа, используемое для подключения к базе данных через ADO.NET, принадлежит роли sysadmin.
  • Убедитесь, что учетная запись пользователя Windows, используемая Visual Studio на компьютере разработки, является допустимой SQL Server учетной записи входа, принадлежащей роли sysadmin.

Первый шаг относительно прост. Сначала укажите учетную запись пользователя, используемую для подключения к базе данных из приложения ASP.NET, а затем в SQL Server Management Studio добавьте эту учетную запись входа в роль sysadmin.

Для второй задачи требуется, чтобы учетная запись пользователя Windows, используемая для отладки приложения, была действительным именем входа в удаленной базе данных. Однако, скорее всего, учетная запись Windows, которую вы вошли на рабочую станцию, не является допустимым именем входа на SQL Server. Вместо того, чтобы добавлять конкретную учетную запись для входа в SQL Server, лучше выбрать учетную запись пользователя Windows в качестве учетной записи SQL Server отладки. Затем, чтобы выполнить отладку объектов базы данных удаленного экземпляра SQL Server, необходимо запустить Visual Studio, используя учетные данные учетной записи входа Windows.

Пример должен помочь прояснить вещи. Представьте себе, что в домене Windows есть учетная запись Windows с именем SQLDebug. Эту учетную запись необходимо добавить к удаленному экземпляру SQL Server в качестве допустимого имени входа и члена роли sysadmin. Затем, чтобы выполнить отладку удаленного экземпляра SQL Server из Visual Studio, необходимо запустить Visual Studio от имени пользователя SQLDebug. Это можно сделать, выполнив выход из рабочей станции, войдя в систему как SQLDebug, а затем запуская Visual Studio, но более простой подход — войти на рабочую станцию, используя собственные учетные данные, а затем использовать runas.exe для запуска Visual Studio в качестве SQLDebug пользователя. runas.exe позволяет выполнять определенное приложение под ГИП другой учетной записи пользователя. Чтобы запустить Visual Studio в качестве SQLDebug, в командной строке можно ввести следующую инструкцию:

runas.exe /user:SQLDebug "%PROGRAMFILES%\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"

Более подробное описание этого процесса см. в разделе Уильям R. Вон s Путеводитель s Guide to Visual Studio and SQL Server, седьмой выпуск, а также инструкции по заданию разрешений SQL Server для отладки.

Note

Если на компьютере разработчика установлена ОС Windows XP с пакетом обновления 2 (SP2), необходимо настроить брандмауэр подключения к Интернету, чтобы разрешить удаленную отладку. В статье как включить отладку SQL Server 2005 заметок о том, что в этом разделе содержится два шага: (а) на хост-компьютере Visual Studio, необходимо добавить Devenv.exe в список исключений и открыть порт TCP 135. и (б) на удаленном компьютере (SQL), необходимо открыть порт TCP 135 и добавить sqlservr.exe в список исключений. Если политика домена требует, чтобы сетевая связь была выполнена через IPSec, необходимо открыть порты UDP 4500 и UDP 500.

Сводка

Помимо поддержки отладки кода приложений .NET, в Visual Studio также доступны различные варианты отладки для SQL Server 2005. В этом учебнике мы рассматривали два варианта: Непосредственная отладка базы данных и отладка приложений. Чтобы выполнить отладку объекта базы данных T-SQL напрямую, найдите объект с помощью обозреватель сервера щелкните его правой кнопкой мыши и выберите шаг с заходом. При этом запускается отладчик и останавливается на первом операторе в объекте Database, после чего можно выполнить пошаговое выполнение инструкций Object s и просмотреть и изменить значения параметров. На этапе 1 мы использовали этот подход для пошагового перехода к хранимой процедуре Products_SelectByCategoryID.

Отладка приложений позволяет задавать точки останова непосредственно в объектах базы данных. Когда объект базы данных с точками останова вызывается из клиентского приложения (например, веб-приложения ASP.NET), программа останавливается, когда выполняется отладчик. Отладка приложений полезна, так как более ясно показывает, какое действие приложения приводит к вызову определенного объекта базы данных. Однако для этого требуется немного больше конфигурации и настройки, чем для прямой отладки базы данных.

Объекты базы данных также можно отлаживать с помощью проектов SQL Server. Мы рассмотрим использование проектов SQL Server и их использование для создания и отладки управляемых объектов базы данных в следующем руководстве.

Поздравляем с программированием!

Об авторе

Скотт Митчелл, автор семи книг по ASP/ASP. NET и основатель 4GuysFromRolla.com, работал с веб-технологиями Майкрософт с 1998. Скотт работает как независимый консультант, преподаватель и модуль записи. Его последняя книга — Sams обучать себя ASP.NET 2,0 за 24 часа. Он доступен по адресу mitchell@4GuysFromRolla.com. или через его блог, который можно найти по адресу http://ScottOnWriting.NET.