绑定参数
在执行 SQL 语句前,该语句中的每个参数标记都必须与应用程序中的某个变量关联或绑定到某个变量。 这是通过调用 SQLBindParameter 函数完成的。 SQLBindParameter 描述驱动程序的程序变量(地址、C 数据类型等)。 它还通过指示其序数值来标识参数标记,然后描述它所表示的 SQL 对象的特点(SQL 数据类型、精度等)。
在执行语句前,可以随时绑定或重新绑定参数标记。 直到发生下列事件之一时,参数绑定才会失效:
调用 SQLFreeStmt 并将 Option 参数设置为SQL_RESET_PARAMS释放绑定到语句句柄的所有参数。
对将 ParameterNumber 设置为绑定参数标记序号的 SQLBindParameter 的调用会自动释放以前的绑定。
应用程序还可以将参数绑定到程序变量数组以成批处理 SQL 语句。 数组绑定有两种不同的类型:
当每个参数绑定到自身的变量数组时,将完成按列绑定。
通过调用属性设置为“SQL_ATTR_PARAM_BIND_TYPE”的 SQLSetStmtAttr,将 ValuePtr 设置为SQL_PARAM_BIND_BY_COLUMN来指定列式绑定。
当 SQL 语句中的所有参数作为一个单元绑定到包含这些参数的各个变量的结构数组时,将完成按行绑定。
通过将属性设置为SQL_ATTR_PARAM_BIND_TYPE的 SQLSetStmtAttr 调用 SQLSetStmtAttr,并将 ValuePtr 设置为包含程序变量的结构的大小来指定行绑定。
当 SQL Server Native Client ODBC 驱动程序向服务器发送字符或二进制字符串参数时,它将值填充到 SQLBindParameter ColumnSize 参数中指定的长度。 如果 ODBC 2.x 应用程序为 ColumnSize 指定 0,驱动程序会将参数值填充到数据类型的精度。 连接到 SQL Server 服务器时精度为 8000,连接到早期版本的 SQL Server 时为 255。 ColumnSize 是变体列的字节数。
SQL Server 支持定义存储过程参数的名称。 ODBC 3.5 还引入了对调用 SQL Server 存储过程时使用的命名参数的支持。 此支持可用于:
调用存储过程,并向为该存储过程定义的参数的子集提供值。
以不同于创建存储过程时指定的顺序指定应用程序中的参数。
仅当使用 Transact-SQL EXECUTE
语句或 ODBC CALL 转义序列执行存储过程时,才支持命名参数。
如果为某一存储过程参数设置 SQL_DESC_NAME
,则查询中的所有存储过程参数也应设置 SQL_DESC_NAME
。 如果在存储过程调用中使用文本,其中参数已SQL_DESC_NAME
设置,则文本应使用格式“name=value”,其中名称是存储过程参数名称(例如。 @p1) 有关详细信息,请参阅 按名称(命名参数)绑定参数。