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


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

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Скачать драйвер OLE DB

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

[1]. Использование интерфейса ISequentialStream для вставки закодированных данных UTF-8 в устаревший текстовый столбец ограничено только серверами, поддерживающими UTF-8. Попытка выполнить этот сценарий при нацеливание на сервер, который не поддерживает UTF-8, приведет к тому, что драйвер публикует следующее сообщение об ошибке: "Потоковая передача не поддерживается по выбранному типу столбца".

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

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

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

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

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

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

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

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

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

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

См. также

Программирование драйвера OLE DB для SQL Server
Использование типов больших значений