Большие двоичные объекты и OLE в SQL Server Native Client

Применимо к: даSQL Server (все поддерживаемые версии) ДаБаза данных SQL Azure ДаУправляемый экземпляр SQL Azure даAzure Synapse Analytics даПараллельное хранилище данных

SQL ServerПоставщик OLE DB собственного клиента предоставляет интерфейс ISequentialStream для поддержки доступа потребителя к SQL Server типам данных ntext, Text, Image, varchar (max), nvarchar (max), varbinary (max) и XML в виде больших двоичных объектов (BLOB). Метод Read интерфейса ISequentialStream позволяет потребителю получать большой объем данных в виде фрагментов данных, с которыми удобно работать.

Образец приложения, демонстрирующий эту возможность, см. в статье Задание данных больших объектов (OLE DB).

SQL ServerПоставщик OLE DB собственного клиента может использовать реализуемый потребителем интерфейс IStorage , когда потребитель предоставляет указатель интерфейса в методе доступа, связанном с изменением данных.

Для типов данных больших значений SQL Server поставщик собственного клиента OLE DB проверяет предположения о размере типов в интерфейсах IROWSET и DDL. Столбцы с типами данных varchar, nvarchar и varbinary с максимальным размером, установленным в значение unlimited, будут представлены как длинные через наборы строк схемы и интерфейсы, возвращающие типы данных столбцов.

SQL ServerПоставщик OLE DB собственного клиента предоставляет типы varchar (max), varbinary (max) и nvarchar (max) как DBTYPE_STR, DBTYPE_BYTES и DBTYPE_WSTR соответственно.

Для работы с этими типами приложение имеет следующие возможности.

  • Выполните привязку, указав тип (DBTYPE_STR, DBTYPE_BYTES, DBTYPE_WSTR). Если буфер недостаточно большой, будет выполнено усечение — точно так же, как в предыдущих версиях (хотя сейчас доступны большие значения).

  • Выполните привязку, указав тип и задав DBTYPE_BYREF.

  • Выполните привязку, указав тип DBTYPE_IUNKNOWN, и используйте потоковую передачу.

При привязке к DBTYPE_IUNKNOWN используется потоковая возможность ISequentialStream. SQL ServerПоставщик OLE DB собственного клиента поддерживает привязку выходных параметров как DBTYPE_IUNKNOWN для типов данных больших значений, чтобы упростить сценарии, в которых хранимая процедура возвращает эти типы данных в виде возвращаемых значений, которые будут предоставлены клиенту как DBTYPE_IUNKNOWN.

Ограничения объекта хранилища

  • SQL ServerПоставщик OLE DB собственного клиента может поддерживать только один открытый объект хранилища. При попытке открыть несколько объектов хранилища (получить ссылку на несколько указателей интерфейса ISequentialStream) возвращается DBSTATUS_E_CANTCREATE.

  • В SQL Server поставщике OLE DB собственного клиента значением свойства DBPROP_BLOCKINGSTORAGEOBJECTS только для чтения является VARIANT_TRUE. Оно указывает, что если имеется активный объект хранилища, некоторые методы (не относящиеся к объектам хранилища) завершатся ошибкой E_UNEXPECTED.

  • Длина данных, представленных объектом хранилища, реализованным потребителем, должна быть известна SQL Server поставщику OLE DB собственного клиента при создании метода доступа к строке, ссылающегося на объект хранилища. Потребитель должен выполнить привязку признака длины в структуре DBBINDING, которая используется для создания метода доступа.

  • Если строка содержит больше одного большого значения данных, а DBPROP_ACCESSORDER не DBPROPVAL_AO_RANDOM, потребитель должен либо использовать SQL Server собственный клиент OLE DBный набор строк с поддержкой курсора поставщика, чтобы получить данные строк или обработать все большие значения данных перед получением других значений строк. Если DBPROP_ACCESSORDER DBPROPVAL_AO_RANDOM, то SQL Server поставщик OLE DB собственного клиента кэширует все типы данных XML как большие двоичные объекты (BLOB), чтобы к ним можно было обращаться в любом порядке.

в этом разделе

См. также:

SQL Server Native Client (OLE DB)
Использование типов больших значений