Compartir a través de


Parámetros de comando

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

{call SalesByCategory('Produce', ?)}  

Para mejorar el rendimiento al reducir el tráfico de red, el proveedor OLE DB de SQL Server Native Client no deriva automáticamente información de parámetros a menos que se llame a ICommandWithParameters::GetParameterInfo o ICommandPrepare::P repare antes de ejecutar un comando. Esto significa que el proveedor OLE DB de SQL Server Native Client no se realiza automáticamente:

  • Compruebe la corrección del tipo de datos especificado con ICommandWithParameters::SetParameterInfo.

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

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

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

  • Asegúrese de que pwszDataSourceType coincide con el tipo de datos de SQL Server para el parámetro si ICommandWithParameters::SetParameterInfo codificado de forma rígida.

  • Asegúrese de que el valor DBTYPE que se enlaza al parámetro es del mismo tipo que el tipo de datos de SQL Server para el parámetro si codifica de forma rígida un descriptor de acceso.

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

Nota:

El proveedor no admite llamar a ICommandWithParameters::GetParameterInfo para cualquier instrucción UPDATE o DELETE de SQL Server que contenga una cláusula FROM; para cualquier instrucción SQL en función de una subconsulta que contenga parámetros; para instrucciones SQL que contienen marcadores de parámetro en ambas expresiones de una comparación, como o predicado cuantificado; o consultas en las que uno de los parámetros es un parámetro para una función. Al procesar un lote de instrucciones SQL, el proveedor tampoco admite llamar a ICommandWithParameters::GetParameterInfo para los marcadores de parámetro en 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 instrucción SQL. En los comandos de llamada a procedimiento, el proveedor OLE DB de SQL Server Native Client admite parámetros de entrada, salida y entrada/salida. Los valores de parámetro de salida se devuelven a la aplicación en ejecución (solo si no se devuelven conjuntos de filas) o cuando la aplicación agota todos los conjuntos de filas devueltos. Para asegurarse de que los valores devueltos son válidos, use IMultipleResults para forzar el consumo de conjuntos de filas.

Los nombres de los parámetros de procedimiento almacenado no se deben especificar en una estructura DBPARAMBINDINFO. Use NULL para el valor del miembro pwszName para indicar que el proveedor OLE DB de SQL Server Native Client debe omitir el nombre del parámetro y usar solo el ordinal especificado en el miembro rgParamOrdinals de ICommandWithParameters::SetParameterInfo. Si el texto del comando contiene parámetros con nombre y sin nombre, se deben especificar todos los parámetros sin nombre 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 Native Client comprueba el nombre 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 del consumidor.

Nota:

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

Véase también

Comandos