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


Как работать с объектами баз данных CLR

 

Помимо языка программирования Transact-SQL, для создания объектов базы данных, которые извлекают и обновляют данные, можно использовать языки .NET Framework.Объекты базы данных, написанные в управляемом коде, называются объектами базы данных SQL Server со средой CLR.Описание преимуществ использования объектов базы данных среды CLR, размещенных в SQL Server, а также сведения о том, как осуществить выбор между Transact-SQL и CLR, см. в разделах Преимущества интеграции со средой CLR и Преимущества использования управляемого кода для создания объектов баз данных.

Чтобы создать объект базы данных CLR в SQL Server Data Tools, необходимо создать проект базы данных, а затем добавить к нему объект базы данных CLR.В отличие от предыдущих версий Visual Studio, не требуется создавать отдельный проект CLR, а затем добавлять ссылку на него из проекта базы данных.После сборки и публикации проекта базы данных автоматически происходит одновременно публикация объектов CLR в проекте.После публикации этих объектов CLR они могут вызываться и выполняться как любые другие объекты базы данных.

На страницах свойств CLR и сборки CLR имеется множество параметров, относящихся к использованию объектов базы данных CLR в конкретном проекте.В частности, на странице свойств CLR имеется настройка уровня разрешений, которая определяет разрешения для сборки CLR.На ней также имеется параметр «Формировать язык DDL», указывающий, должен ли формироваться код языка DDL для объектов базы данных CLR, добавленных к проекту.Страница свойств сборки CLR содержит все параметры компилятора, которые можно задать для настройки компиляции кода CLR в проекте.Для доступа к этим страницам свойств можно щелкнуть правой кнопкой мыши проект в обозревателе решений и выбрать пункт Свойства.

Чтобы включить отладку объектов базы данных CLR, откройте Обозреватель объектов SQL Server.Щелкните правой кнопкой мыши сервер, который содержит подлежащие отладке артефакты базы данных CLR, и выберите команду Разрешить отладку SQL CLR.Откроется окно с предупреждением: «Обратите внимание, что в ходе отладки все управляемые потоки на этом сервере будут остановлены.Включить отладку SQL CLR на этом сервере?».В процессе отладки объектов базы данных CLR прерывание выполнения приостановит все потоки на сервер и затронет других пользователей.По этой причине не следует выполнять отладку приложений базы данных CLR на рабочем сервере.Следует также отметить, что после начала отладки изменить параметры в окне Обозреватель объектов SQL Server будет невозможно.Внесенные в окне Обозреватель объектов SQL Server изменения вступят в силу только в следующем сеансе отладки.

Дополнительные сведения о требованиях к построению объектов базы данных CLR см. в разделе Построение объектов базы данных при помощи интеграции со средой CLR.

System_CAPS_warningПредупреждение

Следующие процедуры используют сущности, созданные в предыдущих процедурах в разделах Разработка подключенной базы данных и Разработка базы данных вне сети с учетом проекта.

Добавление объекта базы данных CLR к вашему проекту

  1. Щелкните правой кнопкой мыши проект базы данных TradeDev в обозревателе решений, выберите Добавить и Создать элемент.

  2. Выберите шаблон C# SQL CLR, а затем пункт Определяемая пользователем функция CLR SQL.Примите имя по умолчанию и нажмите кнопку Добавить.

  3. Добавьте следующий код в текст класса.Эта функция предназначена для проверки номеров телефонов, применяемых в США.Номер телефона должен состоять из 3 цифр, при желании заключенных в круглые скобки, за которыми следует ряд из 3 цифр, а затем ряд из 4 цифр.К примерам поддерживаемых форматов относятся (425) 555-0123, 425-555-0123, 425 555 0123 и 1-425-555-0123.

    [SqlFunction(IsDeterministic = true, IsPrecise = true)]
    public static SqlBoolean validatePhone(SqlString phone)
    {
        string aNorthAmericanPhoneNumberPattern = @"^[01]?[- .]?(\([2-9]\d{2}\)|[2-9]\d{2})[- .]?\d{3}[- .]?\d{4}$";
        if (!phone.IsNull)
        {
           Regex regex = new Regex(aNorthAmericanPhoneNumberPattern);
           return regex.IsMatch(phone.Value);
        }
        return true;
     }
    
  4. Обратите внимание, что выражение Regex подчеркнуто красной чертой.Щелкните правой кнопкой мыши Regex и выберите Разрешить, а затем С использованием System.Text.RegularExpressions.

  5. Если приложение разрабатывается для экземпляра сервера Microsoft SQL Server 2012, то этот шаг можно пропустить.В противном случае SQL Server 2005 и SQL Server 2008 будут поддерживать только проекты базы данных, построенные с применением версий 2.0, 3.0 или 3.5 инфраструктуры .NET Framework.Чтобы убедиться в том, что целевая платформа .NET задана правильно, щелкните правой кнопкой мыши проект базы данных TradeDev в области Обозреватель решений и выберите Свойства.На странице свойств SQLCLR измените значение Целевая платформа, указав .NET Framework 3.5 или более низкую версию.Нажмите Да на заключительном экране, чтобы закрыть и повторно открыть проект.

  6. Щелкните правой кнопкой мыши проект TradeDev и выберите команду Построить, чтобы построить проект.

  7. Дважды щелкните файл Suppliers.sql и выберите пункт Открыть в конструкторе, чтобы открыть таблицу Suppliers в конструкторе таблиц.

  8. Щелкните пустую строку в сетке столбцов, чтобы добавить новый столбец к таблице.Введите phone в качестве значения поля Имя, nvarchar (128) в качестве значения Тип данных и оставьте отметку в поле Разрешить значения NULL.

  9. Щелкните правой кнопкой мыши узел Проверочные ограничения в контекстной области и выберите Добавить новое проверочное ограничение.

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

    CONSTRAINT [CK_Suppliers_CheckPhone] CHECK (dbo.validatePhone(phone)=1),
    

    Это позволяет гарантировать проверку любых данных, введенных в новое поле номера телефона, с помощью определяемой пользователем функции CLR, добавленной ранее.

  11. Нажмите клавишу F5 для построения и развертывания проекта в локальной базе данных.

Использование объектов базы данных CLR

  1. В Обозреватель объектов SQL Server перейдите к локальной базе данных, в которой должен быть развернут проект.

  2. По умолчанию в SQL Server отключена интеграция со средой CLR.Для использования объектов базы данных CLR необходимо включить интеграцию со средой CLR.Для этого необходимо воспользоваться параметром «clr enabled» хранимой процедуры sp_configure.Дополнительные сведения см. в разделе «Параметр clr enabled».

    Щелкните базу данных правой кнопкой мыши и выберите пункт Создать запрос.В области запроса вставьте следующий код и нажмите кнопку Выполнить запрос.

    sp_configure 'clr enabled', 1;
    GO
    RECONFIGURE;
    GO
    
  3. Щелкните правой кнопкой мыши таблицу Suppliers и выберите Просмотр данных.

  4. Введите 5 в качестве значения id, Contoso в качестве значения name, оставьте поле Адрес пустым и задайте 425 3122 1222 в качестве значения phone.Перейдите с помощью клавиши табуляции с поля phone на другое поле и обратите внимание, что появится сообщение, указывающее на конфликт инструкции INSERT с существующим проверочным ограничением, в котором проверяются данные, введенные в поле phone, с использованием заранее заданного шаблона номера телефона.

  5. Измените введенные данные на 425 312 1222 и перейдите с помощью клавиши табуляции на другое поле.Обратите внимание, что в это время происходит подтверждение ввода.

См. также

Преимущества интеграции со средой CLR
Преимущества использования управляемого кода для создания объектов базы данных
Создание объектов базы данных с интеграцией со средой CLR