Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Поставщик OLE DB собственного клиента SQL Server поддерживает две модели для потребителя, чтобы указать данные для строк параметров с табличным значением: принудительной модели и модели извлечения. Доступен пример, демонстрирующий модель извлечения; см. примеры программирования данных SQL Server.
Замечание
Столбец параметров с табличным значением должен иметь значения, не используемые по умолчанию, во всех строках или значениях по умолчанию во всех строках. Невозможно использовать значения по умолчанию в некоторых строках, но не другие. Поэтому в привязках параметров с табличным значением только значения состояния, допустимые для данных столбцов набора строк табличного набора параметров, DBSTATUS_S_ISNULL и DBSTATUS_S_OK. DBSTATUS_S_DEFAULT приведет к сбою, и для значения связанного состояния будет задано значение DBSTATUS_E_BADSTATUS.
Модель отправки (загружает все данные пареметра Table-Valued в памяти)
Модель отправки аналогична использованию наборов параметров (то есть параметр DBPARAMS в ICommand::Execute). Модель отправки используется только в том случае, если объекты набора строк с табличным значением используются без настраиваемой реализации интерфейсов IRowset. Модель принудительной отправки рекомендуется, если количество строк в наборе строк параметров с табличным значением невелико и, как ожидается, не оказывает чрезмерного давления на память в приложении. Это проще, чем модель извлечения, так как она не требует больше функциональных возможностей из приложения-потребителя, чем то, что в настоящее время распространено в типичных приложениях OLE DB.
Ожидается, что потребитель предоставит всем табличным значениям данные параметра поставщику перед выполнением команды. Чтобы предоставить данные, потребитель заполняет объект набора строк с табличным значением параметра для каждого табличного параметра. Объект набора строк с табличным значением предоставляет операции insert, Set и Delete набора строк, которые потребитель будет использовать для управления данными табличного параметра. Поставщик получит данные из этого объекта набора строк с табличным значением во время выполнения.
Когда объект набора строк с табличным значением предоставляется потребителю, потребитель может обрабатывать его как объект набора строк. Потребитель может получить сведения о типе каждого столбца (тип, максимальная длина, точность и масштаб) с помощью метода интерфейса IColumnsInfo::GetColumnInfo или IColumnsRowset::GetColumnsRowset. Затем потребитель создает метод доступа, чтобы указать привязки для данных. Следующим шагом является вставка строк данных в набор строк параметров с табличным значением. Это можно сделать с помощью IRowsetChange::InsertRow. IRowsetChange::SetData или IRowsetChange::D eleteRows также можно использовать в объекте набора строк с табличным значением параметра, если требуется управлять данными. Объекты набора строк с табличным значением относятся к числу ссылок, аналогичные объектам потока.
Если используется IColumnsRowset::GetColumnsRowset, будут последующие вызовы методов IRowset::GetNextRows, IRowset::GetData и IRowset::ReleaseRows в объекте набора строк результирующего столбца.
После начала выполнения команды поставщик OLE DB для собственного клиента SQL Server, значения параметров с табличным значением будут возвращены из этого объекта набора строк с табличным значением и отправлены на сервер.
Для модели отправки требуется минимальная работа потребителем, но используется больше памяти, чем модель извлечения, так как все данные параметров с табличным значением должны находиться в памяти во время выполнения.
Модель извлечения (получение данных параметров Table-Valued по запросу от потребителя)
Модель извлечения полезна для двух сценариев:
Потоковая передача строк.
Если набор строк из другого поставщика используется в качестве значения параметра с табличным значением.
В модели извлечения потребитель предоставляет данные по запросу поставщику. Используйте этот подход, если в приложении много вставок данных, а данные набора строк с табличным значением параметра в памяти приведет к чрезмерному доступу к памяти. Если используются несколько поставщиков OLE DB, модель извлечения потребителя позволяет потребителю предоставить любой объект набора строк в качестве значения параметра с табличным значением.
Чтобы использовать модель извлечения, потребители должны предоставить собственную реализацию объекта набора строк. При использовании модели извлечения с наборами строк с табличным значением параметра (CLSID_ROWSET_TVP), потребитель должен агрегировать объект набора строк с табличным значением параметра, который поставщик предоставляет через метод ITableDefinitionWithConstraints::CreateTableWithConstraints или метод IOpenRowset::OpenRowset. Ожидается, что объект-получатель переопределяет реализацию интерфейса IRowset. Необходимо переопределить следующие функции:
IRowset::GetNextRows
IRowset::AddRefRows
IRowset::GetData
IRowset::ReleaseRows
IRowset::RestartPosition
Поставщик OLE DB собственного клиента SQL Server будет считывать одну или несколько строк за раз из объекта набора строк потребителя для поддержки потоковой передачи в табличных параметрах. Например, пользователь может иметь данные набора строк с табличным значением на диске (не в памяти) и может реализовать функции для чтения данных с диска при необходимости поставщиком OLE DB собственного клиента SQL Server.
Потребитель будет обмениваться данными с поставщиком OLE DB собственного клиента SQL Server с помощью IAccessor::CreateAccessor в объекте набора строк с табличным значением параметра. При чтении данных из буфера потребителя поставщик проверяет, доступны ли все записываемые столбцы и столбцы, не используемые по умолчанию, через по крайней мере один дескриптор доступа и используют соответствующие дескрипторы для чтения данных столбцов. Чтобы избежать неоднозначности, между столбцом набора строк с табличным значением и привязкой должно быть одно-одно соответствие. Дублирование привязок к одному столбцу приведет к ошибке. Кроме того, каждый метод доступа, как ожидается, имеет в последовательности элемент iOrdinal DBBindings. В IRowset::GetData будет столько вызовов, сколько число методов доступа для каждой строки, а порядок вызовов будет зависеть от порядка iOrdinal value от нижнего до более высокого.
Ожидается, что поставщик реализует большую часть интерфейсов, предоставляемых объектом набора строк набора строк табличного значения. Потребитель реализует объект набора строк с минимальными интерфейсами (IRowset). Из-за слепой агрегирования остальные обязательные интерфейсы объектов набора строк будут реализованы объектом набора строк с табличным значением параметра.
Для любого другого объекта набора строк, например объектов набора строк, полученных для любого поставщика OLE DB, набор строк, предоставленный потребителем, должен реализовать все обязательные интерфейсы объектов набора строк, указанные в спецификации OLE DB.
Во время выполнения поставщик OLE DB sql Server Native Client вернется к объекту набора строк для получения строк и чтения данных столбца.
См. также
параметрыTable-Valued (OLE DB)
Использование параметров Table-Valued (OLE DB)