BLOB-объекты и объекты OLE в SQL Server Native Client

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

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

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

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

Поставщик OLE DB SQL Server Native Client предоставляет типы 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 Native Client OLE DB поддерживает привязку выходных параметров в качестве DBTYPE_IUNKNOWN для типов данных больших значений, чтобы упростить сценарии, в которых хранимая процедура возвращает эти типы данных в качестве возвращаемых значений, которые будут предоставляться клиенту в качестве DBTYPE_IUNKNOWN.

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

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

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

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

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

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

См. также:

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