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


Пошаговое руководство. Отладка определяемого пользователем типа SQL/CLR

Обновлен: Ноябрь 2007

Этот раздел применим к:

Выпуск

Visual Basic

C#

C++

Web Developer

Экспресс-выпуск

Тема не применяется Тема не применяется Тема не применяется Тема не применяется

Standard

Тема не применяется Тема не применяется Тема не применяется Тема не применяется

Pro и Team

Тема применяется Тема применяется Тема применяется Тема применяется

Условные обозначения таблицы:

Тема применяется

Применяется

Тема не применяется

Не применяется

Тема применяется, но команда по умолчанию сокрыта

Команда или команды, скрытые по умолчанию.

В этом примере показано, как выполнить отладку определяемого пользователем типа SQL CLR. В демонстрационной базе данных AdventureWorks создается новый тип SQL CLR. Этот тип затем используется в определении таблицы, в операторе INSERT, а затем в операторе SELECT.

ms165056.alert_note(ru-ru,VS.90).gifПримечание.

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке, в зависимости от текущих параметров или выпуска. Чтобы изменить параметры, в меню Сервис выберите команду Параметры импорта и экспорта. Дополнительные сведения см. в разделе Параметры Visual Studio.

Отладка определяемого пользователем типа CLR SQL

  1. В новом проекте SQL Server установите соединение с учебной базой данных AdventureWorks. Дополнительные сведения см. в разделе Практическое руководство. Подключение к базе данных.

  2. Создайте новый тип, используя код из первого примера в нижеприведенном разделе, назовите этот тип Point.cs. Дополнительные сведения см. в разделе Практическое руководство. Разработка с помощью типа проекта SQL Server.

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

  4. Добавьте точки останова.

    1. В папке Типы в окне Обозреватель сервера откройте пункт Point.

    2. Поместите точку останова в каждом методе, чтобы наблюдать за потоком управления в типе.

  5. В меню Отладка выберите Пуск, чтобы скомпилировать, развернуть и объединить модульный тест проекта. Появление указателя инструкций, имеющего вид желтой стрелки, на точке останова означает, что выполняется отладка функции.

  6. Попробуйте выполнить другие функции отладки.

    1. Метод Parse выполняется один раз для каждого оператора INSERT сценария в Point.sql. Последовательно нажимая пункт Шаг с заходом в меню Отладка, можно наблюдать преобразование числовой пары, разделенной знаком двоеточия, в объект Point.

    2. В окне Локальные переменные откройте переменную pt, содержащую Point, построение которого выполняется.

    3. В текстовом редакторе дважды щелкните переменную pt, чтобы выбрать ее. Перетащите pt в любое место окна Контрольные значения. Теперь pt добавлена в лист контролируемых переменных, можно просмотреть эту переменную по мере построения типа Point.

    4. Пройдите данный класс по шагам несколько раз и просмотрите различные пути, в зависимости от вида оператора (INSERT и SELECT).

    5. Снова нажмите Продолжить, чтобы завершить отладку функции.

Пример

Этот код определяет тип, используемый в данном примере. С помощью этого кода выполняется создание таблицы "Points", наполнение этой таблицы строками и вывод содержимого таблицы. Обратите внимание, что нет необходимости включать пакетную команду GO между созданием таблицы и доступом к этой таблице. В действительности Visual Studio 2005 интерпретирует оператор GO как неверную команду SQL.

using System;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Runtime.Serialization;

[Serializable, SqlUserDefinedTypeAttribute(Format.Native)]
public struct Point: INullable
{
    private bool m_isNull;
    private double m_x;
    private double m_y;

    public bool IsNull {
        get { return (m_isNull); }
    }

    public override string ToString()
    {
        if (this.IsNull) { return "NULL"; }
        else { return this.m_x + ":" + this.m_y; }
    }

    public static Point Parse(SqlString s)
    {
        if (s.IsNull) { return Null; }
        else
        {
            // Parse input string here to separate out points:
            Point pt = new Point();
            string str = Convert.ToString(s);
            string[] xy = str.Split(':');

            pt.X = Convert.ToDouble(xy[0]);
            pt.Y = Convert.ToDouble(xy[1]);
            return (pt);
        }
    }

    public static Point Null
    {
        get
        {
            Point pt = new Point();
            pt. m_isNull = true;
            return (pt);
        }
    }

    public double X
    {
        get { return (this.m_x); }
        set { m_x = value; }
    }

    public double Y
    {
        get { return (this.m_y); }
        set { m_y = value; }
    }
}

Это тестовый сценарий вызова функции.

CREATE TABLE dbo.Points ( 
            ID int IDENTITY(1,1) PRIMARY KEY, 
            Pnt Point) 
INSERT INTO dbo.Points (Pnt) VALUES (CONVERT(Point, '3:4')) 
INSERT INTO dbo.Points (Pnt) VALUES (CONVERT(Point, '-1:5')) 
INSERT INTO dbo.Points (Pnt) VALUES (CAST ('1:99' AS Point)) 
SELECT ID, 
        Pnt.ToString() as StringPoint, 
        Pnt.X as X, 
        Pnt.Y as Y      
FROM dbo.Points

См. также

Задачи

Практическое руководство. Создание и запуск пользовательского типа SQL Server в среде CLR

Другие ресурсы

Отладка баз данных SQL в среде CLR