摘要:我正在嘗試使用ODBC和SQL Server 2005將文本字符串寫入類型爲varchar(max)的列。如果字符串的長度大於8000.幫助!如何使用ODBC寫入到varchar(max)列
我有一些C++代碼使用ODBC(SQL Native Client)將文本字符串寫入表中。如果我改變,比如說,從VARCHAR(100)爲varchar(最大值)列並嘗試寫,長度大於8000的字符串寫入失敗,出現以下錯誤
[微軟] [ODBC SQL服務器 驅動程序]字符串數據,右截斷
所以,任何人都可以告訴我。如果可以做到這一點,怎麼樣?
一些示例(不生產)的代碼,顯示我想要做的事:
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(最大值)單科拉姆。函數AllocBigString(未顯示)創建一個任意長度的字符串。
據我所知,先前版本的SQL Server對varchars有8000個字符限制,但不是爲什麼在SQL 2005中發生這種情況?
感謝, 安迪
謝謝你Remus!你是對的,我使用了錯誤的司機。當我改變它的時候,它工作。 爲了記錄,我使用了以下連接字符串: Driver = {SQL Native Client};服務器= 127.0.0.1;數據庫= MyTestDB; 這與您給出的驅動程序名稱並不完全相同,但是您的消化指出了我的答案。 再次感謝 - 非常感謝。 Andy – 2009-07-02 15:23:23