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


Отладка объектов базы данных CLR

Область применения: SQL Server

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.

Отладка разрешений и ограничений

Отладка — это операция с высоким уровнем привилегий, поэтому в SQL Server разрешены только члены предопределенных ролей сервера sysadmin .

При отладке применяются следующие ограничения.

  • При отладке процедур CLR можно использовать одновременно только один экземпляр отладчика. Это ограничение налагается в связи с тем, что при достижении точки останова выполнение всего кода CLR приостанавливается и возобновляется лишь после прохождения отладчиком этой точки останова. Однако вы можете продолжить отладку Transact-SQL в других подключениях. Несмотря на то, что отладка Transact-SQL не зависает на сервере, это может привести к тому, что другие подключения будут ожидать, удерживая блокировку.

  • Существующие подключения нельзя отладить, только новые подключения, так как SQL Server требует сведений о среде клиента и отладчика, прежде чем подключиться.

Из-за указанных выше ограничений рекомендуется отладить код Transact-SQL и CLR на тестовом сервере, а не на рабочем сервере.

Обзор

Отладка в SQL Server следует модели для каждого подключения. Отладчик может обнаруживать и отлаживать действия только в том клиентском соединении, к которому он присоединен. Функциональные возможности отладчика не ограничиваются типом соединения, поэтому возможна отладка как соединений с потоком табличных данных (TDS), так и HTTP-соединений. Однако SQL Server не разрешает отладку существующих подключений. Процесс отладки поддерживает общие функции отладки внутри процедур, выполняемых на сервере. Взаимодействие между отладчиком и SQL Server происходит через распределенную объектную модель компонента (COM).

Дополнительные сведения и сценарии отладки управляемых хранимых процедур, функций, триггеров, определяемых пользователем типов и агрегатов см . в документации по Sql Server CLR Integration Database Отладка в документации по Visual Studio.

Сетевой протокол TCP/IP должен быть включен в экземпляре SQL Server, чтобы использовать Visual Studio для удаленной разработки, отладки и разработки. Дополнительные сведения о включении протокола TCP/IP на сервере см. в разделе "Настройка клиентских протоколов".

Шаги отладки

Выполните следующие действия для отладки объекта базы данных CLR в Microsoft Visual Studio:

  1. Откройте Microsoft Visual Studio и создайте проект SQL Server. Вы можете использовать экземпляр Sql LocalDB, который поставляется с Visual Studio.

  2. Создайте новый тип СРЕДЫ CLR SQL (C#):

    1. В Обозреватель решений щелкните проект правой кнопкой мыши и выберите "Добавить", "Создать элемент"..
    2. В окне добавления нового элемента выберите хранимую процедуру SQL CLR C#, определяемую пользователем функцию SQL CLR C#, определяемую пользователем тип SQL CLR C#, триггер CLR C# SQL CLR, агрегат CLR C# ИЛИ класс.
    3. Укажите имя исходного файла нового типа и нажмите кнопку "Добавить".
  3. Добавьте в текстовый редактор код для нового типа. Пример кода для примера хранимой процедуры см. в следующем разделе "Пример" в этой статье.

  4. Добавьте скрипт, который проверяет тип:

    1. В Обозреватель решений щелкните правой кнопкой мыши узел проекта и выберите "Добавить", "Скрипт...".
    2. В окне "Добавить новый элемент" выберите скрипт (не в сборке) и укажите имя, напримерTest.sql. Нажмите кнопку Добавить.
    3. В Обозреватель решений дважды щелкните Test.sql узел, чтобы открыть исходный файл скрипта по умолчанию.
    4. Добавьте тестовый скрипт (который вызывает код для отладки) в текстовый редактор. См. пример в следующем разделе для примера скрипта.
  5. Поместите одну или несколько точек останова в исходный код. Щелкните правой кнопкой мыши строку кода в текстовом редакторе функции или подпрограммы, которую требуется выполнить отладку. Выберите точку останова, вставить точку останова. Точка останова добавится, а строка кода будет выделена красным цветом.

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

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

    1. Чтобы перейти к следующей строке кода, используйте шаг сверху из меню отладки .
    2. Используйте окно "Локальные" для наблюдения за состоянием объектов, выделенных указателем инструкции.
    3. Добавьте переменные в окно "Контроль ". Состояние отслеживаемых переменных можно наблюдать во время сеанса отладки, даже если переменная не находится в строке кода, выделенной указателем инструкции.
    4. Выберите "Продолжить " в меню отладки , чтобы перейти к следующей точке останова или завершить выполнение подпрограммы, если нет больше точек останова.

Пример кода

В следующем примере возвращается версия SQL Server вызывающей объекту.

using System.Data.SqlClient;
using Microsoft.SqlServer.Server;

public class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void GetVersion()
    {
        using (var connection = new SqlConnection("context connection=true"))
        {
            connection.Open();
            var command = new SqlCommand("select @@version", connection);
            SqlContext.Pipe.ExecuteAndSend(command);
        }
    }
}

Пример тестового скрипта

В следующем тестовом скрипте показано, как вызвать GetVersion хранимую процедуру, определенную в предыдущем примере.

EXEC GetVersion  

Следующие шаги

Дополнительные сведения об отладке управляемого кода с помощью Visual Studio см . в документации по Visual Studio по отладке управляемого кода .

Дополнительные сведения см. в разделе "Основные понятия программирования среды cl language Runtime"