Отладка объектов базы данных среды CLR
В SQL Server предоставляется поддержка отладки объектов Transact-SQL и среды CLR в базе данных. Ключевыми особенностями отладки в SQL Server стали простота установки и использования, а также интеграция отладчика SQL Server с отладчиком Microsoft Visual Studio. Более того, процесс отладки охватывает код на всех применяемых языках: пользователи могут беспрепятственно переходить к коду объектов среды CLR из кода Transact-SQL и наоборот. Отладчик Transact-SQL в среде SQL Server Management Studio нельзя использовать для отладки управляемых объектов базы данных, но эти объекты можно отлаживать с помощью отладчиков, входящих в состав среды Visual Studio. Отладка управляемого объекта базы данных в Visual Studio поддерживает все обычные средства отладки, такие как шаг с входом и шаг с выходом в процедурах, выполняющихся на сервере. Отладчики могут задавать точки останова, просматривать стек вызова, проверять значения переменных и изменять значения переменных во время отладки. Обратите внимание, что среду Visual Studio .NET 2003 нельзя использовать для программирования или отладки в интеграции со средой CLR. В состав SQL Server входит предварительно установленная платформа .NET Framework, а Visual Studio .NET 2003 не может использовать сборки .NET Framework версии 2.0.
Дополнительные сведения об отладке управляемого кода с помощью Visual Studio см. в разделе «Отладка управляемого кода» в документации Visual Studio.
Разрешения и ограничения отладки
Отладка представляет собой операцию, требующую повышенных прав доступа, и поэтому в SQL Server ее могут осуществлять только члены предопределенной роли сервера sysadmin.
При отладке применяются следующие ограничения.
При отладке процедур CLR можно использовать одновременно только один экземпляр отладчика. Это ограничение налагается в связи с тем, что при достижении точки останова выполнение всего кода CLR приостанавливается и возобновляется лишь после прохождения отладчиком этой точки останова. Однако отладку кода Transact-SQL можно продолжать в других соединениях. Хотя отладка кода Transact-SQL не приводит к приостановке выполнения другого кода на сервере, она может вызывать переход других соединений в состояние ожидания в результате блокировки.
Отладка может быть выполнена только для новых соединений, так как перед выполнением соединения SQL Server требуются сведения о среде клиента и отладчика.
С учетом указанных ограничений рекомендуется отлаживать код Transact-SQL и CLR на тестовом, а не на рабочем сервере.
Общие сведения об отладке управляемых объектов базы данных
Отладка в SQL Server организована на основе модели с учетом соединений. Отладчик может обнаруживать и отлаживать действия только в том клиентском соединении, к которому он присоединен. Функциональные возможности отладчика не ограничиваются типом соединения, поэтому возможна отладка как соединений с потоком табличных данных (TDS), так и HTTP-соединений. Однако SQL Server не позволяет выполнять отладку существующих соединений. Процесс отладки поддерживает общие функции отладки внутри процедур, выполняемых на сервере. Взаимодействие между отладчиком и сервером SQL Server происходит через модель DCOM.
Дополнительные сведения об отладке и сценарии отладки управляемых хранимых процедур, функций, триггеров, определяемых пользователем типов и статистических выражений см. в разделе «Отладка базы данных SQL Server в режиме интеграции со средой CLR» в документации по Visual Studio.
Чтобы использовать Visual Studio для удаленной разработки, отладки и разработки, в экземпляр SQL Server должен быть включен протокол TCP/IP. Дополнительные сведения о включении на сервере протокола TCP/IP см. в разделе Настройка клиентских протоколов.
Отладка управляемого объекта базы данных
Откройте среду Microsoft Visual Studio, создайте новый проект SQL Server и установите соединение с базой данных экземпляра SQL Server.
Создайте новый тип. Щелкните правой кнопкой мыши проект в Обозревателе решений и последовательно выберите Добавить и Новый элемент… В окне Добавить новый элемент выберите Хранимая процедура, Определяемая пользователем функция, Определяемый пользователем тип, Триггер, Статистическое выражение или Класс. Укажите имя исходного файла для нового типа и нажмите Добавить.
Добавьте в текстовый редактор код для нового типа. Образец кода для примера хранимой процедуры см. далее в этом разделе.
Добавьте скрипт, который будет тестировать этот тип. В Обозревателе решений разверните каталог TestScripts и щелкните файл Test.sql, чтобы открыть исходный файл тестового скрипта по умолчанию. Добавьте в текстовый редактор тестовый скрипт, вызывающий отладку кода. Образец скрипта см. ниже.
Поместите одну или несколько точек останова в исходный код. Щелкните правой кнопкой мыши строку кода в текстовом редакторе внутри функции или процедуры, которую необходимо отладить, и последовательно выберите Точка останова и Вставить точку останова. Точка останова добавится, а строка кода будет выделена красным цветом.
В меню Отладка для компиляции, развертывания и тестирования проекта выберите Начать отладку. В Test.sql запустится тестовый скрипт и будет вызван управляемый объект базы данных.
Когда на точке останова появится желтая стрелка, обозначающая указатель команд, выполнение кода приостановится и можно будет начать отладку управляемого объекта базы данных. Из меню Отладка можно выполнить Шаг с пропуском, чтобы переместить указатель команд на следующую строку кода. Окно Локальные используется для просмотра состояния объектов, выделенных указателем команд. В окне Контрольные значения можно добавить переменные. Состояние контролируемых переменных можно просмотреть по всему сеансу отладки, а не только в строке кода, выделенной указателем команд. В меню «Отладка» нажмите кнопку «Продолжить», чтобы переместить указатель команд на следующую точку останова или завершить выполнение процедуры, если точек останова больше нет.
Пример
Следующий пример возвращает версию SQL Server участнику.
C#
using System;
using System.Data;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server;
public class StoredProcedures
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void GetVersion()
{
using(SqlConnection connection = new SqlConnection("context connection=true"))
{
connection.Open();
SqlCommand command = new SqlCommand("select @@version",
connection);
SqlContext.Pipe.ExecuteAndSend(command);
}
}
}
Visual Basic
Imports System
Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Imports System.Data.SqlClient
Partial Public Class StoredProcedures
<Microsoft.SqlServer.Server.SqlProcedure> _
Public Shared Sub GetVersion()
Using connection As New SqlConnection("context connection=true")
connection.Open()
Dim command As New SqlCommand("SELECT @@VERSION", connection)
SqlContext.Pipe.ExecuteAndSend(command)
End Using
End Sub
End Class
Ниже представлен тестовый скрипт, вызывающий хранимую процедуру GetVersion, заданную выше.
EXEC GetVersion
См. также
Другие ресурсы
Основные понятия о программировании интеграции со средой CLR