要約:ODBCおよびSQL Server 2005を使用してvarchar(max)型の列にテキスト文字列を書き込もうとしています。文字列の長さ8000より大きい。ヘルプ!ODBCを使用してvarchar(max)列に書き込む方法
ODBC(SQL Native Client)を使用してテキスト文字列をテーブルに書き込むC++コードがあります。私はvarchar型(最大)までのvarchar(100)、たとえば、から列を変更し、8000以上の長さの文字列を記述しようとすると、書き込みが次のエラー
[Microsoft]の[ODBC SQL Serverと失敗します ドライバ]文字列データ、右切り捨て
これは実行できるかどうか、誰にでも助言できますか?私がやろうとしているかを示して
いくつかの例(ない生産)コード:
SQLHENV hEnv = NULL;
SQLRETURN iError = SQLAllocEnv(&hEnv);
HDBC hDbc = NULL;
SQLAllocConnect(hEnv, &hDbc);
const char* pszConnStr = "Driver={SQL Server};Server=127.0.0.1;Database=MyTestDB";
UCHAR szConnectOut[SQL_MAX_MESSAGE_LENGTH];
SWORD iConnectOutLen = 0;
iError = SQLDriverConnect(hDbc, NULL, (unsigned char*)pszConnStr,
SQL_NTS, szConnectOut,
(SQL_MAX_MESSAGE_LENGTH-1), &iConnectOutLen,
SQL_DRIVER_COMPLETE);
HSTMT hStmt = NULL;
iError = SQLAllocStmt(hDbc, &hStmt);
const char* pszSQL = "INSERT INTO MyTestTable (LongStr) VALUES (?)";
iError = SQLPrepare(hStmt, (SQLCHAR*)pszSQL, SQL_NTS);
char* pszBigString = AllocBigString(8001);
iError = SQLSetParam(hStmt, 1, SQL_C_CHAR, SQL_VARCHAR, 0, 0, (SQLPOINTER)pszBigString, NULL);
iError = SQLExecute(hStmt); // Returns SQL_ERROR if pszBigString len > 8000
テーブルMyTestTableは、varchar型(最大)として定義され、単一のcolumが含まれています。関数AllocBigString(図示せず)は、任意の長さの文字列を作成する。
SQL Serverの以前のバージョンではvarcharsに8000文字の制限がありましたが、SQL 2005ではこれがなぜ起こっているのではないと思いますか?
おかげで、 アンディあなたはあなたが2005年のSQLネイティブドライバをロード
ありがとうございます!あなたは正しい、私は間違ったドライバを使用していた。私がそれを変更したとき、それは働いた。 レコードとしては、次の接続文字列を使用しました。 ドライバ= {SQLネイティブクライアント};サーバー= 127.0.0.1;データベース= MyTestDB; あなたが与えたドライバ名とまったく同じではありませんが、あなたの甘えが答えに私を指摘しました。 ありがとうございます。大変感謝しています。 Andy –
明らかに、私はMSDNから名前をコピーして回答を得ることができません。そうですね、名前は{SQL Native Client}ですが、他のGoogleのためにも投稿を修正します。 –