Отладка объектов базы данных 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:
Откройте Microsoft Visual Studio и создайте проект SQL Server. Вы можете использовать экземпляр Sql LocalDB, который поставляется с Visual Studio.
Создайте новый тип СРЕДЫ CLR SQL (C#):
- В Обозреватель решений щелкните проект правой кнопкой мыши и выберите "Добавить", "Создать элемент"..
- В окне добавления нового элемента выберите хранимую процедуру SQL CLR C#, определяемую пользователем функцию SQL CLR C#, определяемую пользователем тип SQL CLR C#, триггер CLR C# SQL CLR, агрегат CLR C# ИЛИ класс.
- Укажите имя исходного файла нового типа и нажмите кнопку "Добавить".
Добавьте в текстовый редактор код для нового типа. Пример кода для примера хранимой процедуры см. в следующем разделе "Пример" в этой статье.
Добавьте скрипт, который проверяет тип:
- В Обозреватель решений щелкните правой кнопкой мыши узел проекта и выберите "Добавить", "Скрипт...".
- В окне "Добавить новый элемент" выберите скрипт (не в сборке) и укажите имя, например
Test.sql
. Нажмите кнопку Добавить. - В Обозреватель решений дважды щелкните
Test.sql
узел, чтобы открыть исходный файл скрипта по умолчанию. - Добавьте тестовый скрипт (который вызывает код для отладки) в текстовый редактор. См. пример в следующем разделе для примера скрипта.
Поместите одну или несколько точек останова в исходный код. Щелкните правой кнопкой мыши строку кода в текстовом редакторе функции или подпрограммы, которую требуется выполнить отладку. Выберите точку останова, вставить точку останова. Точка останова добавится, а строка кода будет выделена красным цветом.
В меню отладки выберите "Начать отладку", чтобы скомпилировать, развернуть и протестировать проект. Тестовый скрипт
Test.sql
выполняется и вызывается объект управляемой базы данных.Когда желтая стрелка (обозначающая указатель инструкции) отображается в точке останова, выполнение кода приостанавливается. Затем можно выполнить отладку объекта управляемой базы данных:
- Чтобы перейти к следующей строке кода, используйте шаг сверху из меню отладки .
- Используйте окно "Локальные" для наблюдения за состоянием объектов, выделенных указателем инструкции.
- Добавьте переменные в окно "Контроль ". Состояние отслеживаемых переменных можно наблюдать во время сеанса отладки, даже если переменная не находится в строке кода, выделенной указателем инструкции.
- Выберите "Продолжить " в меню отладки , чтобы перейти к следующей точке останова или завершить выполнение подпрограммы, если нет больше точек останова.
Пример кода
В следующем примере возвращается версия 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"