Большие двоичные объекты и объекты OLE
Поставщик OLE DB для собственного клиента SQL Server предоставляет интерфейс ISequentialStream для поддержки доступа потребителя к типам данных SQL Server ntext, text, image, varchar(max), nvarchar(max), varbinary(max) и xml как к большим двоичным объектам (BLOB). Метод Read интерфейса ISequentialStream позволяет потребителю получать большой объем данных в виде фрагментов данных, с которыми удобно работать.
Образец приложения, демонстрирующий эту функцию, см. в разделе Задание данных больших объектов (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 для собственного клиента SQL Server поддерживает выходные параметры привязки как тип DBTYPE_IUNKNOWN для типов данных больших значений, чтобы облегчить ситуацию, когда хранимая процедура возвращает значения этих типов данных, которые будут представлены клиенту как тип DBTYPE_IUNKNOWN.
Ограничения объекта хранилища
Поставщик OLE DB для собственного клиента 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), чтобы они были доступны в любом порядке.