Главная » Microsoft SQL Server, Базы данных » Методы .NET, поддерживающие интеграцию CLR

0

Разработчику, создающему компоненты CLR базы данных с помощью пространства имен Sql Client, доступна богатая структура программирования среды .NET Framework. В этом пространстве имен существует набор классов, предназначенный для возвращения результатов и сообщений вызывающему приложению. Еще один набор классов используется для доступа к операциям базы данных из типов интеграции CLR.

Дополнительная Подробно о доступе к данным с помощью пространства имен System.Data, информация SqlClient вы узнаете в главе 30.

Некоторые операции (например, массовая загрузка, асинхронное выполнение и пакетные обновления) допустимы только в том случае, когда соединение выходит за пределы локального контекста процесса. Несмотря на то что большая часть серверных средств теперь интегрирована в SqlClient, существует масса классов для очень важных объектов, которые используются для серверной обработки, в пространстве имен Microsoft. SqlServer. Server сборки System.Data. Эти классы обеспечивают поддержку специальных видов деятельности, необходимых только в контексте локального процесса. Что очень важно — явное именование подключения как “the current context” позволяет доставлять результаты и сообщения клиенту и выполнять операции, используя контекст текущего процесса.

Интеграция CLR в SQL Server отделила серверный контекст процесса интеграции Совет                        CLR от сетевого контекста выполнения SqlClient вне процесса. Одним из ожи

даемых достоинств такой изоляции была возможность поддержки серверных курсоров на стороне сервера при одновременном устранении ограничений масштабируемости серверных курсоров на стороне клиента. Случайно эта технология оказалась таковой, что если серверный курсор должен поддерживаться программным кодом интеграции CLR, то он должен быть представлен в пространстве имен SqlClient. Следствием стало то, что серверный контекст выполнения процесса был ассимилирован в SqlClient. Разработчикам пришлось вносить существенные изменения в программу задним числом. Так что в Интернете и даже в группах новостей Microsoft циркулируют сотни примеров, которые были созданы до внесения этих изменений в архитектуру интеграции CLR. Если программный код найденного вами примера ссылается на пространство имен System.Data. SqlServer, то это явно указывает на то, что он был написан до выхода версии SQL Server 2005 RTM, т.е. до внесения вышеуказанных изменений. В цикле разработки среды .NET Framework 2.0 слишком поздно отразилось то, что компоненты интеграции CLR были вынесены в пространство имен System.Data. SqlClient. Серверная обработка теперь представляет собой один из режимов SqlClient, который задается и распознается в строке подключения:

Dim cnSQL As SQLConnection = _

New SQLConnection("context connection=true")

Текущее определение контекста подключения можно найти в пространстве имен Microsoft. SqlServer. Server в Visual Studio 2005.

Разработчики часто используют преимущества работы с программным кодом примеров. Принимая во внимание то, что цикл бета-тестирования SQL Server 2005 был, пожалуй, самым массовым за всю историю, была создана громадная масса примеров, предшествующая официальному выходу в свет этой версии продукта. Весь этот программный код остается действенным и полезным в большинстве случаев, если разработчик скорректирует в случае необходимости ссылки на пространства имен. Только в этом случае код примера сможет функционировать.

Класс Microsoft. SqlServer. Server. SqlContext используется для установки специализированных серверных компонентов SQL Server. Открытие протокола взаимодействия с запрашиваемым приложением или клиентом выполняется с помощью свойства SqlContext. Pipe (). Это свойство используется для перемещения результирующих множеств и сообщений из хранимых процедур интеграции CLR и запрашиваемых приложений. SqlContext. Pipe () содержит метод Send, способный вернуть сообщение (об этом мы поговорим немного позже в этой главе): pPipe.Send(System.Data.String) ошибку:

pPipe.Send(System.Data.SqlClient.Error) результирующий набор данных: pPipe.Send(System.Data.Sql.ISqlReader) или строку данных:

pPipe.Send(System.Data.Sql.ISqlRecord)

в зависимости от аргумента, передаваемого методу.

При возвращении результата метод Pipe. Send может доставлять данные из уже выполненного запроса и создавать объект DataReader на наборе данных DataSet или посылать уже созданный объект DataReader результирующего набора непосредственно из базы данных.

Коммуникационный канал предназначен в основном для процедур и функций, но в то же время может использоваться для триггеров. Как и в случае с триггерами Т-SQL, отправка сообщений из подчиненных данным программ является потенциально рискованной операцией, поскольку не существует способа проверить, было ли получено сообщение.

Объект SqlContext позволяет получить в триггерах полезную информацию посредством свойства SqlContext. TriggerContext (). Это свойство идентифицирует перечисление Microsoft. SqlServer. Server. TriggerAction, которое вызвало триггер DDL или DML.

Одним из самых больших достижений внедрения недолго просуществовавшего пространства имен System. Data. SqlServer в пространство имен System. Data. SqlClient стало сокращение числа различных технологий, необходимых для эффективной реализации интеграции CLR. Теперь в пространстве имен Microsoft. SqlServer. Server стало меньше членов и уменьшилось количество ограниченных контекстом подключения функций. В то же время средства создания доступа к данным остались такими же, независимо от того, развертывается ли код на сервере или на другом уровне приложения.

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии