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

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

Загрузить 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), как методы в классе C#. Это позволяет этим хранимым процедурам и пользовательским функциям использовать функциональные возможности в платформа .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от группы интеграции среды CLR SQL Server 2005 рассматриваются три способа отладки объектов SQL Server 2005 из Visual Studio:

  • Прямая отладка баз данных (DDD) — из серверных Обозреватель мы можем перейти к любому объекту базы данных T-SQL, например к хранимым процедурам и пользовательским функциям. Мы рассмотрим DDD на шаге 1.
  • Отладка приложений — мы можем задать точки останова в объекте базы данных, а затем запустить приложение ASP.NET. При выполнении объекта базы данных будет достигнута точка останова, а управление будет передано отладчику. Обратите внимание, что при отладке приложений мы не можем войти в объект базы данных из кода приложения. Необходимо явно задать точки останова в тех хранимых процедурах или определяемых пользователем функциях, в которых должен остановиться отладчик. Отладка приложений рассматривается, начиная с шага 2.
  • Отладка из проекта SQL Server — выпуски 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 возвращает сведения о продукте для определенной категории. Он был создан в учебнике Использование существующих хранимых процедур для TableAdapters typed DataSet. Для начала перейдите к Обозреватель Server и разверните узел базы данных Northwind. Затем выполните детализацию в папке Хранимые процедуры, щелкните правой кнопкой мыши хранимую Products_SelectByCategoryID процедуру и выберите в контекстном меню параметр Шаг в хранимую процедуру. Это приведет к запуску отладчика.

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

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

Рис. 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_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>

Примечание

После завершения отладки 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.