调用ODBC中SQLBindParameter引发的段错误

在使用ODBC进行数据库操作时,遇到调用SQLBindParameter进行参数绑定时出现段错误的问题。原因是传递了局部变量的地址作为参数长度,正确的做法是使用全局变量或在SQLExecute后释放。当StrLen_or_IndPtr指向SQL_DATA_AT_EXEC时,数据将通过SQLPutData发送。在执行SQL语句前,应确保绑定的存储位置有效且在同一个过程作用域内或全局声明。
摘要由CSDN通过智能技术生成

前提背景:

遇到了一个特别奇怪的问题,调用SQLBindParameter进行参数绑定是,最后一个参数交互的是绑定数据的长度,整数类型指针,随后我就传入了个局部遍历取地址传入,随后执行时程序说不定什么时候就莫名的段错误,最后查找文档和对这段代码进行调试,最后确定要传入的是全局变量,或当调用SQLExecute执行完SQL语句再释放,因为在调用 SQLExecute() 或 SQLExecDirect() 时,并且 StrLen_or_IndPtr (最后一个指针)指向 SQL_DATA_AT_EXEC 值时, 将使用 SQLPutData() 来发送数据。此参数称为执行数据参数。 以下红色标记,是对上述出现问题的准确回复。

参考文件:

DB2 通用数据库 iSeries 版 SQL 调用层接口(ODBC)

SQLBindParameter() 用来使 SQL 语句中的参数标记与应用程序变量相关联(绑定)。当调用SQLExecute()SQLExecDirect() 时,将把数据从应用程序传送至 DBMS。在传送数据时,可能会发生数据转换。

还必须使用此函数来将应用程序存储器绑定到存储过程 CALL 语句的参数,该参数可以是输入参数、输出参数或输入输出参数。此函数本质上是 SQLSetParam() 的扩展。

语法

SQLRETURN SQLBindParameter(SQLHSTMT          StatementHandle,
                           SQLSMALLINT      ParameterNumber,
                           SQLSMALLINT       InputOutputType,
                           SQLSMALLINT       ValueType,
                           SQLSMALLINT       ParameterType,
                           SQLINTEGER        ColumnSize,
                           SQLSMALLINT       DecimalDigits,
                           SQLPOINTER        ParameterValuePtr,
                           SQLINTEGER        BufferLength,
                           SQLINTEGER       *StrLen_or_IndPtr);

函数自变量

表 22. SQLBindParameter 自变量

数据类型 自变量 使用 描述
SQLHSTMT StatementHandle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值