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


Параметры команд

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

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

Параметры помечаются в тексте команды знаками вопроса. Например, следующая инструкция SQL помечена для одного входного параметра:

{call SalesByCategory('Produce', ?)}  

Для повышения производительности путем уменьшения сетевого трафика драйвер OLE DB для SQL Server наследует сведения о параметрах автоматически, только если перед выполнением команды вызывается метод ICommandWithParameters::GetParameterInfo или ICommandPrepare::Prepare. Это означает, что OLE DB Driver for 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 Driver for SQL Server поддерживает входные параметры в командах инструкций SQL. OLE DB Driver for SQL Server поддерживает для команд вызова процедур входные, выходные и входные-выходные параметры. Значения выходных параметров возвращаются приложению либо при выполнении (только если не возвращаются наборы строк), либо когда все возвращаемые наборы строк уже использованы приложением. Чтобы проверить допустимость возвращаемых значений, используется IMultipleResults для принудительного потребления набора строк.

Имена параметров хранимых процедур не обязательно указывать в структуре DBPARAMBINDINFO. Чтобы показать, что драйвер OLE DB для SQL Server не должен пропускать имя параметра и должен использовать только порядковый номер, указанный в элементе rgParamOrdinals метода ICommandWithParameters::SetParameterInfo, используется значение NULL элемента pwszName. Если текст команды содержит как именованные, так и неименованные параметры, все неименованные параметры должны быть указаны до именованных параметров.

Если указано имя параметра хранимой процедуры, драйвер OLE DB для SQL Server проверяет, является ли имя допустимым. OLE DB Driver for SQL Server возвращает ошибку при получении от потребителя неверного имени параметра.

Примечание.

Чтобы предоставить поддержку XML-кода SQL Server и определяемых пользователем типов (UDT), драйвер OLE DB для SQL Server реализует новый интерфейс ISSCommandWithParameters .

См. также

Команды