绑定参数

在执行 SQL 语句前,该语句中的每个参数标记都必须与应用程序中的某个变量关联或绑定到某个变量。通过调用 SQLBindParameter 函数做到这点。SQLBindParameter 向驱动程序描述程序变量(地址、C 数据类型等)。它还通过指示其序数值来标识参数标记,然后描述它所表示的 SQL 对象的特点(SQL 数据类型、精度等)。

在执行语句前,可以随时绑定或重新绑定参数标记。直到发生下列事件之一时,参数绑定才会失效:

  • 调用 SQLFreeStmt 并将 Option 参数设置为 SQL_RESET_PARAMS 时,将释放绑定到语句句柄的所有参数。

  • 调用 SQLBindParameter 并将 ParameterNumber 设置为绑定参数标记的序数时,将自动释放以前的绑定。

应用程序还可以将参数绑定到程序变量数组以成批处理 SQL 语句。数组绑定有两种不同的类型:

  • 当每个参数绑定到自身的变量数组时,将完成按列绑定。

    通过调用 SQLSetStmtAttr 并将 Attribute 设置为 SQL_ATTR_PARAM_BIND_TYPE 而将 ValuePtr 设置为 SQL_PARAM_BIND_BY_COLUMN,可以指定按列绑定。

  • 当 SQL 语句中的所有参数作为一个单元绑定到包含这些参数的各个变量的结构数组时,将完成按行绑定。

    通过调用 SQLSetStmtAttr 并将 Attribute 设置为 SQL_ATTR_PARAM_BIND_TYPE 而将 ValuePtr 设置为存储程序变量的结构的大小,可以指定按行绑定。

SQL Server Native Client ODBC 驱动程序将字符或二进制字符串参数发送到服务器时,它将值填充到在 SQLBindParameterColumnSize 参数中指定的长度。如果 ODBC 2.x 应用程序为 ColumnSize 指定 0,则驱动程序将参数值填充到该数据类型的精度。连接到 SQL Server 服务器时,精度为 8000;连接到早期版本的 SQL Server 时,精度为 255。ColumnSize 对于变量列用字节表示长度。

SQL Server 支持为存储过程参数定义名称。ODBC 3.5 还支持在调用 SQL Server 存储过程时使用的命名参数。此支持可用于:

  • 调用存储过程,并向为该存储过程定义的参数的子集提供值。

  • 以不同于创建存储过程时指定的顺序指定应用程序中的参数。

仅当使用 Transact-SQLEXECUTE 语句或 ODBC CALL 转义序列执行存储过程时,才支持命名参数。

如果为某一存储过程参数设置 SQL_DESC_NAME,则查询中的所有存储过程参数也设置 SQL_DESC_NAME。如果在存储过程调用中使用文字,其中参数设置了 SQL_DESC_NAME,则这些文字应该使用格式 'name=value',其中,name 是存储过程参数名称(例如 @p1)。有关详细信息,请参阅 Binding Parameters by Name (Named Parameters)(按名称绑定参数(命名参数))。

请参阅

概念