SQLExecute всегда возвращает & quot; [Microsoft] [собственный клиент SQL Server 10.0] Строковые данные, усечение справа & quot; в параметрах размером более 8К

Когда я выполняю функцию SQLExecute, она всегда возвращает мне «[Microsoft] [Собственный клиент SQL Server 10.0] Строковые данные, усечение справа», когда мой параметр имеет более 8 Кбайт. Я вставлю код ниже.
Что я пытаюсь сделать: сохранить файл XML в столбце, объявленном как varbinary (max) через хранимую процедуру через драйверы ODBC (Visual C ++ 2008) в SQL Server 2008 R2.
SP конвертирует из varchar в varbinary вызов SET @XML_FILE_BIN = CONVERT(VARBINARY(MAX), @XML_FILE)
Это работает нормально, если я пытаюсь вставить весь XML в SQL Server Management Studio.
Я думаю, что-то не так привязка в SQLBindParameter.
Код:

char* cXmlBuf; it contains my buffer
retcode = SQLBindParameter(
hstmt,              //StatementHandle
1,                  //ParameterNumber
SQL_PARAM_INPUT,    //InputOutputType
SQL_C_CHAR,         //ValueType
SQL_CHAR,           //ParameterType
SQL_DESC_LENGTH,    //ColumnSize
0,                  //DecimalDigits
cXmlBuf,            //ParameterValuePtr
bufLenght,          //BufferLength
&cbXml              //StrLen_or_IndPtr
);

if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
return;

SWORD id = 0;
SQLINTEGER cbId = 0;
retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_OUTPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &id, 0, &cbId);

if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
return;

retcode = SQLPrepare(hstmt, (SQLCHAR*)"{CALL MY_STORE_PROC(?, ?)}", SQL_NTS);

if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)
return;

retcode = SQLFreeStmt(hstmt, SQL_CLOSE); // Clear any cursor state
retcode = SQLExecute(hstmt);
//in this part retcode is -1 and "[Microsoft][SQL Server Native Client
//10.0]String data, right truncation" is returned if my XML buffer
//has more than 8k

0

Решение

Нашел это!
Я объявил SQLINTEGER cbXml = SQL_NTS; вместо SQLLEN cbXml = 0;
Благодарю.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]