首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLBindParameter要么说它需要更多的数据,要么忽略我的值。

SQLBindParameter要么说它需要更多的数据,要么忽略我的值。
EN

Stack Overflow用户
提问于 2019-09-09 01:14:31
回答 1查看 94关注 0票数 0

我有以下方法将int值绑定到SQL语句:

代码语言:javascript
复制
void BindIntColumn(int nColumn, int nValue)
{
    ASSERT(m_hStmt != SQL_NULL_HSTMT);
    SQLINTEGER nSize = sizeof(nValue);
    SQLRETURN nReturn = ::SQLBindParameter(m_hStmt, nColumn, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &nValue, 0, &nSize);
    COdbcException::CheckError(nReturn, m_hStmt, SQL_HANDLE_STMT);
}

当我运行这段代码时,::SQLBindParameter()返回SQL_NEED_DATA。我也不知道原因。

如果我将最后一个参数更改为::SQLBindParameter()nullptr,则返回SQL_SUCCESS。实际上,SQLExecute()确实添加了行!但是,这一列的增加值是一些随机的大数,例如13498810。(传递给此方法的值为1。)

我还尝试将nValue参数更改为long类型,但得到了相同的结果。

有人能帮我弄明白吗?我只想将一个整数值绑定到我的语句中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-09 02:58:34

ParameterValuePtr参数到SQLBindParameter是一个延迟参数,即在调用SQLExecute或SQLExecDirect之前不使用该值,并且它需要在那个时候有效。StrLen_or_IndPtr参数也是一样的(只要它不是null)。在这里,您传递局部变量的地址,但它在执行语句之前超出了作用域。

您关于SQL_NEED_DATA的错误是没有意义的,因为它根本没有记录为来自SQLBindParameter的合法返回值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57846864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档