Parámetros de comando

Los parámetros se marcan en el texto de comando con el carácter de signo de interrogación de cierre. Por ejemplo, la siguiente instrucción SQL está marcada para un único parámetro de entrada:

{call SalesByCategory('Produce', ?)}

Para mejorar el rendimiento mediante la reducción del tráfico de red, el proveedor OLE DB de SQL Server Native Client no deriva automáticamente la información de parámetros a menos que se llame a ICommandWithParameters::GetParameterInfo o ICommandPrepare::Prepare antes de ejecutar un comando. Esto significa que el proveedor OLE DB de SQL Server Native Client no realiza de forma automática las siguientes tareas:

  • Comprobar la exactitud del tipo de datos especificado con ICommandWithParameters::SetParameterInfo.

  • Asignar el DBTYPE especificado en la información de enlace del descriptor de acceso al tipo de datos SQL Server correcto para el parámetro.

Las aplicaciones recibirán posibles errores o pérdidas de precisión con cualquiera de estos métodos si especifican tipos de datos que no son compatibles con el tipo de datos SQL Server del parámetro.

Para asegurarse de que esto no ocurra, la aplicación debe:

  • Asegurarse de que pwszDataSourceType coincida con el tipo de datos SQL Server para el parámetro si ICommandWithParameters::SetParameterInfo se incluye en el código.

  • Asegurarse de que el valor DBTYPE enlazado al parámetro sea del mismo tipo que el tipo de datos SQL Server para el parámetro si se incluye un descriptor de acceso en el código.

  • Codificar la aplicación para llamar a ICommandWithParameters::GetParameterInfo de forma que el proveedor pueda obtener dinámicamente los tipos de datos SQL Server de los parámetros. Tenga en cuenta que esto provoca un viaje de ida y vuelta (round trip) adicional de la red al servidor.

Nota

El proveedor no permite que se llame a ICommandWithParameters::GetParameterInfo para ninguna instrucción UPDATE o DELETE de SQL Server que contenga una cláusula FROM; para ninguna instrucción SQL que dependa de una subconsulta que contenga parámetros; para instrucciones SQL que contengan marcadores de parámetros en las dos expresiones de una comparación, igualdad o predicado cuantificado; o consultas donde uno de los parámetros sea un parámetro a una función. Al procesar un lote de instrucciones SQL, el proveedor tampoco admite que se llame a ICommandWithParameters::GetParameterInfo para marcadores de parámetros de instrucciones después de la primera instrucción del lote. No se permiten comentarios (/* */) en el comando Transact-SQL.

El proveedor OLE DB de SQL Server Native Client admite parámetros de entrada en comandos de instrucciones SQL. En comandos de llamadas a procedimientos, el proveedor OLE DB de SQL Server Native Client admite parámetros de entrada, parámetros de salida y parámetros de entrada y salida. Los valores de los parámetros de salida se devuelven a la aplicación en ejecución (únicamente si no se ha devuelto ningún conjunto de filas) o cuando la aplicación agota todos los conjuntos de filas. Para asegurarse de que los valores devueltos sean válidos, utilice IMultipleResults para forzar el consumo del conjunto de filas.

No es necesario especificar los nombres de los parámetros de procedimientos almacenados en una estructura DBPARAMBINDINFO. Utilice NULL para el valor del miembro pwszName a fin de indicar que el proveedor OLE DB de SQL Server Native Client deber omitir el nombre del parámetro y utilizar únicamente el ordinal especificado en el miembro rgParamOrdinals de ICommandWithParameters::SetParameterInfo. Si el texto del comando contiene tanto parámetros con nombre como parámetros sin nombre, todos los parámetros sin nombre deben especificarse antes de cualquier parámetro con nombre.

Si se especifica el nombre de un parámetro de procedimiento almacenado, el proveedor OLE DB de SQL Server lo comprueba para asegurarse de que es válido. El proveedor OLE DB de SQL Server Native Client devuelve un error cuando recibe un nombre de parámetro erróneo por parte del consumidor.

Nota

Para exponer la compatibilidad con XML y tipos definidos por el usuario (UDT) de SQL Server, el proveedor OLE DB de SQL Server Native Client implementa una nueva interfaz ISSCommandWithParameters.

Vea también

Conceptos