首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于输入/输出参数的SQLBindParameter问题

关于输入/输出参数的SQLBindParameter问题
EN

Stack Overflow用户
提问于 2010-02-09 10:10:10
回答 2查看 560关注 0票数 0

为了调用SQL过程,我绑定了以下参数:

代码语言:javascript
复制
TCHAR str[41];
SQLINTEGER cb;
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT_OUTPUT, SQL_C_TCHAR, SQL_C_TCHAR, 40, 0, str, 0, &cb);

当我在调用查询后遍历str时,我可以看到结果在那里,但这并不完全正确:

代码语言:javascript
复制
std::stringstream ss;
ss<<"{";
for(int i=0;i<41;++i)
{
    ss<<(int)str[i];
    if(i<40)ss<<',';
}
ss<<"}"<<endl<<"{";
for(int i=0;i<41;++i)
{
    if(str[i])
        ss<<"'"<<str[i]<<"'";
    else
        ss<<"null";
    if(i<40)ss<<',';
}
ss<<"}"<<endl;
cout<<ss.str();

{53,55,56,49,53,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0} {'5','7','8','1','5',‘’,‘',‘’、'、null}

无论出于什么原因,str都是用空格填充的。我知道SQL过程实际上是从隔离测试中返回"57815“。有什么想法吗?怎么解决?在执行SQL调用后,cb值被设置为40。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-09 11:18:14

如果SQL数据库字段是CHAR类型,那么它将是空格填充(如果不是CHAR,那么它是什么类型?)这是预期的行为。如果不是,您确定SQL_C_TCHAR是您真正想要的类型吗?它没有在此MSDN页面上列出。

票数 1
EN

Stack Overflow用户

发布于 2012-05-30 10:42:38

您应该使用VARCHAR而不是CHAR,使用SQL_VARCHAR作为参数的SQL类型。

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

https://stackoverflow.com/questions/2228211

复制
相关文章

相似问题

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