SQLExecute関数を実行すると、常に「[Microsoft] [SQL Serverネイティブクライアント10.0]文字列データ、右切り捨て "私のパラメータが8キロバイト以上の場合。私は以下のコードを貼り付けます。 私がやろうとしていること:SQL Server 2008 R2でODBCドライバ(Visual C++ 2008)を介してストアドプロシージャを介してvarbinary(max)として宣言された列にXMLファイルを格納する。 SPはvarcharからvarbinaryに変換しますSET @XML_FILE_BIN = CONVERT(VARBINARY(MAX), @XML_FILE)
SQL Server Management Studioのint全体を貼り付けるとうまくいきます。 SQLBindParameterのバインディングが間違っていると思います。 コード:SQLExecuteは、常に8Kを超えるパラメータの「[Microsoft] [SQL Serverネイティブクライアント10.0]文字列データ、右切り捨て」を返す
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