Поделиться через


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

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

Загрузить PDF-файл

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

Введение

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

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

Примечание

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

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

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

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

В записи блога Overview of T-SQL and CLR Debugging in SQL Server 2005 (Обзор отладки T-SQL и CLR в SQL Server 2005) группы по интеграции со средой CLR SQL Server 2005 описывается три способа отладки объектов SQL Server 2005 из Visual Studio:

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

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

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

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

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

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

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

Используйте значение 1 для параметра <span class=@CategoryID " />

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

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

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

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

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

Примечание

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

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

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

Прежде чем начать отладку хранимых процедур, вызываемых из приложения, необходимо указать веб-приложению ASP.NET выполнить интеграцию с отладчиком SQL Server. Для начала щелкните правой кнопкой мыши имя веб-сайта в Обозреватель решений (ASPNET_Data_Tutorial_74_VB). Выберите параметр Страницы свойств в контекстном меню, выберите пункт Параметры запуска слева и проверка флажок 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>

Примечание

После завершения отладки 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 процедура была создана в учебнике Using Existing Stored Procedures for the Typed DataSet s TableAdapters . Соответствующая веб-страница (~/AdvancedDAL/ExistingSprocs.aspx) содержит GridView, отображающий результаты, возвращаемые этой хранимой процедурой. Посетите эту страницу через браузер. По достижении страницы точка останова в хранимой Products_SelectByCategoryID процедуре будет достигнута, а управление будет возвращено в Visual Studio. Как и в шаге 1, можно выполнить пошаговое выполнение инструкций хранимой процедуры, а также просмотреть и изменить значения параметров.

На странице ExistingSprocs.aspx изначально отображаются напитки

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

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

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

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

Выберите другую категорию из списка Drop-Down

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

Параметр <span class=@CategoryID отражает категорию, выбранную на веб-странице" />

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

Примечание

Если точка останова в 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 есть учетная запись SQLDebug Windows. Эту учетную запись необходимо добавить в удаленный экземпляр 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"

Более подробное описание этого процесса см. в статье Руководство по Visual Studio и SQL Server Седьмого выпускаУильяма Р. Вона( William R. Vaughn).

Примечание

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

Сводка

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

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

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

Счастливого программирования!

Об авторе

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