【发布时间】:2009-07-02 13:45:50
【问题描述】:
总结:我正在尝试使用 ODBC 和 SQL Server 2005 将文本字符串写入 varchar(max) 类型的列。如果字符串的长度大于 8000,则会失败。求助!
我有一些使用 ODBC (SQL Native Client) 将文本字符串写入表的 C++ 代码。如果我将列从 varchar(100) 更改为 varchar(max) 并尝试写入长度大于 8000 的字符串,则写入失败并出现以下错误
[微软][ODBC SQL Server Driver]字符串数据,右截断
那么,谁能告诉我这是否可以做到,以及如何做到?
显示我正在尝试做的一些示例(不是生产)代码:
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(max) 的列。 AllocBigString 函数(未显示)创建任意长度的字符串。
我知道以前版本的 SQL Server 对 varchars 有 8000 个字符的限制,但不知道为什么在 SQL 2005 中会发生这种情况?
谢谢, 安迪
【问题讨论】:
标签: c++ sql-server sql-server-2005 odbc