У меня есть следующий параметр для вызова процедуры 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» от тестирования в изоляции. Есть идеи, что происходит и как это решить?
Значение cb устанавливается равным 40 после выполнения вызова SQL.