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


Отладка объектов базы данных 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 поддерживает все распространенные функции отладки, такие как операторы step into и step over в подпрограммах, выполняемых на сервере. Отладчики могут задавать точки останова, просматривать стек вызова, проверять значения переменных и изменять значения переменных во время отладки. Обратите внимание, что 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 требует сведений о среде клиента и отладчика, прежде чем подключиться.

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

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

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

Дополнительные сведения и сценарии отладки управляемых хранимых процедур, функций, триггеров, определяемых пользователем типов и агрегатов см. в разделе "Отладка базы данных интеграции СРЕДЫ CLR SQL Server" в документации по Visual Studio.

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

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

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

  2. Создайте новый тип. В обозревателе решений щелкните проект правой кнопкой мыши, выберите "Добавить " и "Создать элемент". В окне "Добавление нового элемента" выберите хранимую процедуру, User-Defined функцию, User-Defined тип, триггер, агрегат или класс. Укажите имя исходного файла нового типа и нажмите кнопку "Добавить".

  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  

См. также

Концепции программирования интеграции с Common Language Runtime (CLR)