Параметры команд
Параметры помечаются в тексте команды знаками вопроса. Например, следующая инструкция SQL помечена для одного входного параметра:
{call SalesByCategory('Produce', ?)}
Для повышения производительности путем уменьшения сетевого трафика поставщик OLE DB собственного клиента SQL Server наследует сведения о параметрах, только если перед выполнением команды вызывается метод ICommandWithParameters::GetParameterInfo или ICommandPrepare::Prepare. Это означает, что поставщик OLE DB собственного клиента SQL Server автоматически:
не проверяет правильность типа данных, указанного при помощи ICommandWithParameters::SetParameterInfo;
не сопоставляет тип DBTYPE, указанный в данных привязки метода доступа, с правильным типом данных SQL Server для параметра.
Приложения будут получать возможные ошибки или потери точности одним из этих методов, если они указывают типы данных, несовместимые с типом данных SQL Server для параметра.
Чтобы гарантировать, что подобная ситуация не произойдет, для приложения необходимо:
Проверить, что тип данных pwszDataSourceType совпадает с типом данных SQL Server для параметра для жестко запрограммированного метода ICommandWithParameters::SetParameterInfo.
Проверить, что тип значения DBTYPE, связанного с параметром, совпадает с типом данных SQL Server для жестко запрограммированного метода доступа.
Настроить приложение на вызов метода ICommandWithParameters::GetParameterInfo так, что поставщик сможет автоматически получать типы данных SQL Server для параметров. Обратите внимание, что это приведет к дополнительному обмену данными с сервером.
Примечание |
---|
Поставщик не поддерживает вызов метода ICommandWithParameters::GetParameterInfo для любой инструкции SQL Server UPDATE или DELETE, содержащей предложение FROM; для любой инструкции SQL, которая зависит от вложенного запроса, содержащего параметры; для инструкций SQL, содержащих маркеры параметров в обоих сравниваемых выражениях или предикат с квантором; или запросов, в которых один из параметров является параметром функции. При обработке пакета инструкций SQL поставщик также не поддерживает вызов метода ICommandWithParameters::GetParameterInfo для маркеров параметров в выражениях после обработки первой инструкции в пакете. В команде Transact-SQL не допускаются комментарии (/* */). |
Поставщик OLE DB собственного клиента SQL Server поддерживает входные параметры в командах инструкций SQL. Поставщик OLE DB собственного клиента SQL Server поддерживает для команд вызова процедур входные, выходные и входные-выходные параметры в командах инструкций SQL. Значения выходных параметров возвращаются приложению либо при выполнении (только если не возвращаются наборы строк), либо когда все возвращаемые наборы строк уже использованы приложением. Чтобы проверить допустимость возвращаемых значений используется IMultipleResults для принудительного потребления набора строк.
Имена параметров хранимых процедур не обязательно указывать в структуре DBPARAMBINDINFO. Чтобы показать, что поставщик OLE DB для собственного клиента SQL Server не должен пропускать имя параметра и должен использовать только порядковый номер, указанный в элементе rgParamOrdinals метода ICommandWithParameters::SetParameterInfo, используется значение NULL элемента pwszName. Если текст команды содержит как именованные, так и неименованные параметры, все неименованные параметры должны быть указаны до именованных параметров.
Если указано имя параметра хранимой процедуры, поставщик OLE DB для собственного клиента SQL Server проверяет, является ли имя правильным. Поставщик OLE DB для собственного клиента SQL Server возвращает ошибку при получении ошибочного имени параметра от потребителя.
Примечание |
---|
Для предоставления поддержки XML SQL Server и определяемых пользователем типов поставщик OLE DB для собственного клиента SQL Server содержит интерфейс ISSCommandWithParameters. |