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


Приступая к работе с интеграцией со средой CLR

В этом разделе представлены общие сведения о пространстве имен и библиотек, необходимых для компиляции объектов базы данных с использованием интеграции MicrosoftSQL Server со средой CLR инфраструктуры Microsoft .NET Framework. В этом разделе также показано, как написать, скомпилировать и выполнить простую хранимую процедуру CLR на языке Microsoft Visual C#.

Необходимые пространства имен

Начиная с версии SQL Server 2005, компоненты, необходимые для разработки основных объектов базы данных CLR, устанавливаются вместе с SQL Server. Функциональность интеграции со средой CLR доступна через сборку под названием system.data.dll, которая является частью платформы .NET Framework. Эту сборку можно найти в глобальном кэше сборок (GAC), а также в каталоге .NET Framework. Ссылка на эту сборку обычно добавляется автоматически и при использовании инструментов с интерфейсом командной строки, и при работе в среде Microsoft Visual Studio, поэтому нет необходимости добавлять ее вручную.

Сборка system.data.dll содержит следующие пространства имен, необходимые для компиляции объектов базы данных среды CLR:

System.Data

System.Data.Sql

Microsoft.SqlServer.Server

System.Data.SqlTypes

Создание простой хранимой процедуры «Hello World»

Скопируйте и вставьте следующий код Visual C# или Microsoft Visual Basic в текстовом редакторе и сохраните его в файле с именем «helloworld.cs» или «helloworld.vb».

using System;using System.Data;using Microsoft.SqlServer.Server;using System.Data.SqlTypes;public class HelloWorldProc{    [Microsoft.SqlServer.Server.SqlProcedure]    public static void HelloWorld(out string text)    {        SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);        text = "Hello world!";    }}
Imports SystemImports System.DataImports Microsoft.SqlServer.ServerImports System.Data.SqlTypesImports System.Runtime.InteropServices Public Class HelloWorldProc    <Microsoft.SqlServer.Server.SqlProcedure> _     Public Shared  Sub HelloWorld(<Out()> ByRef text as String)        SqlContext.Pipe.Send("Hello world!" & Environment.NewLine)        text = "Hello world!"    End SubEnd Class

Эта простая программа содержит единственный статический метод общего класса. В методе используются два новых класса, SqlContext и SqlPipe, позволяющие создать управляемые объекты базы данных для вывода простого текстового сообщения. Метод также присваивает выходному параметру в качестве значения строку "Hello world!". Этот метод можно объявить как хранимую процедуру SQL Server, а затем выполнить так же, как и любую хранимую процедуру Transact-SQL.

После этого достаточно скомпилировать эту программу как библиотеку, загрузить ее в SQL Server и выполнить как хранимую процедуру.

Компилирование хранимой процедуры «Hello World»

В SQL Server распространяемые файлы Microsoft .NET Framework устанавливаются по умолчанию. Эти файлы включают csc.exe и vbc.exe, компиляторы командной строки для программ Visual C# и Visual Basic. Чтобы скомпилировать приведенный образец, измените используемую системную переменную пути и укажите в ней путь к каталогу, содержащему файл csc.exe или vbc.exe. Ниже приведен используемый по умолчанию путь установки .NET Framework.

C:\Windows\Microsoft.NET\Framework\(version)

Версия содержит номер версии установленной платформы .NET Framework. Например,

C:\Windows\Microsoft.NET\Framework\v2.0.31113

После добавления каталога .NET Framework к пути можно скомпилировать образец хранимой процедуры с созданием сборки с помощью следующей команды. Параметр /target позволяет скомпилировать код в виде сборки.

Для файлов с исходным кодом Visual C#:

csc /target:library helloworld.cs 

Для файлов с исходным кодом Visual Basic:

vbc /target:library helloworld.vb

Эти команды запускают компилятор Visual C# или Visual Basic с использованием параметра /target, задающего построение библиотеки DLL.

Загрузка и выполнение хранимой процедуры «Hello World» в SQL Server

После успешной компиляции образца процедуры можно провести ее проверку в SQL Server. Для этого откройте среду SQL Server Management Studio и создайте новый запрос, соединившись с подходящей тестовой базой данных (например, к образцу базы данных AdventureWorks).

По умолчанию возможность выполнять код CLR в SQL Server отключена. Код CLR можно включить запуском системной хранимой процедуры sp_configure. Дополнительные сведения см. в разделе Включение интеграции со средой CLR.

Создание сборки требуется для того, чтобы можно было получить доступ к хранимой процедуре. В этом примере предполагается, что была создана сборка helloworld.dll в каталоге C:\. Добавьте к запросу следующую инструкцию Transact-SQL.

CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE

После создания сборки появляется возможность получить доступ к методу HelloWorld с помощью инструкции создания процедуры. Назовем создаваемую хранимую процедуру «hello»:

CREATE PROCEDURE hello@i nchar(25) OUTPUTASEXTERNAL NAME helloworld.HelloWorldProc.HelloWorld

После создания процедуры ее можно выполнить как обычную хранимую процедуру на языке Transact-SQL. Выполните следующую команду:

DECLARE @J nchar(25)EXEC hello @J outPRINT @J

Это должно привести к появлению следующего вывода в окне сообщений среды SQL Server Management Studio.

Hello world!Hello world!

Удаление образца хранимой процедуры «Hello World»

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

Вначале удалите процедуру с помощью команды drop procedure.

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'hello')   drop procedure hello

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

IF EXISTS (SELECT name FROM sys.assemblies WHERE name = 'helloworld')   drop assembly helloworld