Проблема с SQLBindParameter для параметра IN / OUT - PullRequest
0 голосов
/ 09 февраля 2010

У меня есть следующий параметр для вызова процедуры 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.

Ответы [ 2 ]

1 голос
/ 09 февраля 2010

Если поле базы данных SQL имеет тип CHAR, оно будет дополнено пробелами (и если это не CHAR, какой это тип?). Это ожидаемое поведение. Если вы не уверены, что SQL_C_TCHAR именно тот тип, который вам действительно нужен - его нет в списке на этой странице MSDN .

0 голосов
/ 30 мая 2012

Вы должны использовать VARCHAR вместо CHAR, используйте SQL_VARCHAR в качестве типа SQL вашего аргумента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...