为了调用SQL过程,我绑定了以下参数:
TCHAR str[41];
SQLINTEGER cb;
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT_OUTPUT, SQL_C_TCHAR, SQL_C_TCHAR, 40, 0, str, 0, &cb);当我在调用查询后遍历str时,我可以看到结果在那里,但这并不完全正确:
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。
发布于 2010-02-09 11:18:14
如果SQL数据库字段是CHAR类型,那么它将是空格填充(如果不是CHAR,那么它是什么类型?)这是预期的行为。如果不是,您确定SQL_C_TCHAR是您真正想要的类型吗?它没有在此MSDN页面上列出。
发布于 2012-05-30 10:42:38
您应该使用VARCHAR而不是CHAR,使用SQL_VARCHAR作为参数的SQL类型。
https://stackoverflow.com/questions/2228211
复制相似问题