更新时间:2026-07-28 GMT+08:00
分享

SQLBindParameter

功能描述

将一条SQL语句中的一个参数标志和一个缓冲区绑定起来。

原型

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SQLRETURN SQLBindParameter(SQLHSTMT       StatementHandle,    
                           SQLUSMALLINT   ParameterNumber,     
                           SQLSMALLINT    InputOutputType,
                           SQLSMALLINT    ValueType,
                           SQLSMALLINT    ParameterType,
                           SQLULEN    ColumnSize,
                           SQLSMALLINT    DecimalDigits,
                           SQLPOINTER     ParameterValuePtr,
                           SQLLEN     BufferLength,
                           SQLLEN     *StrLen_or_IndPtr);

参数

表1 SQLBindParameter

关键词

参数说明

StatementHandle

语句句柄。

ParameterNumber

参数序号,起始为1,依次递增。

InputOutputType

输入输出参数类型。可以是SQL_PARAM_INPUT、SQL_PARAM_OUTPUT、SQL_PARAM_INPUT_OUTPUT。

ValueType

参数的C数据类型。可以是SQL_C_CHAR、SQL_C_LONG、SQL_C_DOUBLE等。

ParameterType

参数的SQL数据类型。可以是SQL_CHAR、SQL_INTEGER、SQL_DOUBLE等。

ColumnSize

相应参数标记的列或表达式的大小。

DecimalDigits

相应参数标记的列或表达式的十进制数字。

ParameterValuePtr

指向存储参数数据缓冲区的指针。

BufferLength

ParameterValuePtr指向缓冲区的长度,以字节为单位。

StrLen_or_IndPtr

缓冲区的长度或指示器指针。若为空值,则未使用任何长度或指示器值。

当绑定的字符类型数据中含'\0'字符且libpq的0字符参数supportZeroCharacter设置为1时,用户需要保证输入的字符串长度(StrLen_or_IndPtr)等于含'\0'字符的字符串的实际长度。当输入的字符串长度大于含'\0'字符的字符串实际长度时,此场景下若发生内存越界访问,会在libpq侧产生coredump;当输入的字符串长度小于含'\0'字符的字符串实际长度时,会按照用户输入的字符串长度对含'\0'字符的字符串进行截断。

当0字符参数supportZeroCharacter设置为1时,还需要保证客户端字符集和数据库字符集一致。

返回值

  • SQL_SUCCESS:表示调用正确。
  • SQL_SUCCESS_WITH_INFO:表示会有一些警告信息。
  • SQL_ERROR:表示比较严重的错误,如:内存分配失败、建立连接失败等。
  • SQL_INVALID_HANDLE:表示调用无效句柄。其他API的返回值同理。

注意事项

当SQLBindParameter返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时,通过调用SQLGetDiagRec函数,并将HandleType和Handle参数设置为SQL_HANDLE_STMT和StatementHandle,可得到一个相关的SQLSTATE值,通过SQLSTATE值可以查出调用此函数的具体信息。

示例

请参见:典型应用开发示例

相关文档