Отладка объектов базы данных среды 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 см. в разделе Настройка клиентских протоколов.

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

  1. Откройте среду Microsoft Visual Studio, создайте новый проект SQL Server и установите соединение с базой данных экземпляра SQL Server.

  2. Создайте новый тип. Щелкните правой кнопкой мыши проект в Обозревателе решений и последовательно выберите Добавить и Новый элемент… В окне Добавить новый элемент выберите Хранимая процедура, Определяемая пользователем функция, Определяемый пользователем тип, Триггер, Статистическое выражение или Класс. Укажите имя исходного файла для нового типа и нажмите Добавить.

  3. Добавьте в текстовый редактор код для нового типа. Образец кода для примера хранимой процедуры см. далее в этом разделе.

  4. Добавьте скрипт, который будет тестировать этот тип. В Обозревателе решений разверните каталог TestScripts и щелкните файл Test.sql, чтобы открыть исходный файл тестового скрипта по умолчанию. Добавьте в текстовый редактор тестовый скрипт, вызывающий отладку кода. Образец скрипта см. ниже.

  5. Поместите одну или несколько точек останова в исходный код. Щелкните правой кнопкой мыши строку кода в текстовом редакторе внутри функции или процедуры, которую необходимо отладить, и последовательно выберите Точка останова и Вставить точку останова. Точка останова добавится, а строка кода будет выделена красным цветом.

  6. В меню Отладка для компиляции, развертывания и тестирования проекта выберите Начать отладку. В Test.sql запустится тестовый скрипт и будет вызван управляемый объект базы данных.

  7. Когда на точке останова появится желтая стрелка, обозначающая указатель команд, выполнение кода приостановится и можно будет начать отладку управляемого объекта базы данных. Из меню Отладка можно выполнить Шаг с пропуском, чтобы переместить указатель команд на следующую строку кода. Окно Локальные используется для просмотра состояния объектов, выделенных указателем команд. В окне Контрольные значения можно добавить переменные. Состояние контролируемых переменных можно просмотреть по всему сеансу отладки, а не только в строке кода, выделенной указателем команд. В меню «Отладка» нажмите кнопку «Продолжить», чтобы переместить указатель команд на следующую точку останова или завершить выполнение процедуры, если точек останова больше нет.

Пример

Следующий пример возвращает версию 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