首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输出变量字符的SQLBindParameter

输出变量字符的SQLBindParameter
EN

Stack Overflow用户
提问于 2013-05-08 23:42:20
回答 1查看 2.2K关注 0票数 2

我有一个具有varchar输出参数的存储过程:

代码语言:javascript
复制
@UserIDOut varchar(50) OUTPUT

在我的C++代码中,我尝试将输出参数绑定到以下内容:

代码语言:javascript
复制
...
SQLCHAR userIDOut[50];
int dbReturn = ExecProc(...(SQLCHAR**)&userIDOut);
...

int ExecProc(...SQLCHAR **userIDOut)
{
...
    SQLINTEGER cbParam7 = SQL_NTS;
    retcode = SQLBindParameter(hstmt1, 7, SQL_PARAM_OUTPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0, *userIDOut, 50, &cbParam7);

    retcode = SQLExecDirect(hstmt1, (UCHAR*)"{? = call UpdateUser(?,?,?,?,?,?)}", SQL_NTS);

我还有其他几个输入参数,以及此存储过程的返回值。我已经尝试了这个函数调用的一些变体,但是我在userIDOut中从来没有得到任何东西。如果我从SQL Server执行存储过程,我会得到正确的输出。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-11 02:34:16

根据评论:

您需要将指向userIDOut的指针传递给SQLBindParameter。您传递的不是指向userIDOut的指针,而是userIDOut的第一个字节被重新解释为指针。

数组被隐式转换为指向其第一个元素的指针(由于数组是连续存储在内存中的,这使得其他数据也可以访问),因此不需要编写&userIDOut,如果将类型更改为SQLCHAR *,则只需编写userIDOut即可。

代码语言:javascript
复制
int ExecProc(..., SQLCHAR *userIDOut)
{
  ...
  ... SQLBindParameter(..., userIDOut, 50, &cbParam7);
  ...
}

// To call
... ExecProc(..., userIDOut);

如果您愿意,您可以继续使用指向userIDOut的指针,但这需要您使用指向数组的指针,而不是指向指针的指针,并且指向数组的指针使用了一种笨拙的语法,并且通常不会比指向数组的某个元素的指针有更多的值:

代码语言:javascript
复制
int ExecProc(..., SQLCHAR (*userIDOut)[50])
{
  ...
  ... SQLBindParameter(..., userIDOut, 50, &cbParam7);
  ...
}

// To call
... ExecProc(..., &userIDOut);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16444822

复制
相关文章

相似问题

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