使用 ODBC 的 MSSQL 数据库中的垃圾 varchar 条目
Junk varchar entries in MSSQL database using ODBC
我正在尝试将字符串变量插入到 varchar(100) 字段中,但如果字符串长度超过 15 个元素,则只插入垃圾(例如"0‰?")。
首先我的设置:
开发: Win7 (64位)/VS2013/C++11/64位应用程序
数据库: Win8 (64bit)/Microsoft SQL Server Express 2014 (64bit)
驱动程序: SQL Server 本机客户端 11.0
其次是参数的绑定:
std::string mMessageText;
SQLHANDLE mSqlStatementHandle;
std::string mExecString;
bool initConnection()
{
mExecString = "{? = CALL dbo.InsertTestProcedure(?, ?, ?, ?, ?)}";
(...)
// bind parameters
SQLBindParameter(mSqlStatementHandle, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 100, 0, (SQLPOINTER)mMessageText.c_str(), mMessageText.length(), NULL);
(...)
// prepare handle with execution string
if (SQL_SUCCESS != SQLPrepare(mSqlStatementHandle, (SQLCHAR*)mExecString.c_str(), (SQLSMALLINT)mExecString.length()))
{
throwError(SQL_HANDLE_STMT, mSqlStatementHandle);
return false;
}
}
第三,查询执行:
bool fillDb()
{
(...)
mMessageText = "This text is longer than 15";
// execute SQL statement
if (SQL_SUCCESS != SQLExecute(mSqlStatementHandle))
{
throwError(SQL_HANDLE_STMT, mSqlStatementHandle);
return false;
}
(...)
}
过程的标题:
ALTER PROCEDURE [dbo].[InsertTestProcedure]
@MessageComp VARCHAR(20),
@MessageType VARCHAR(20),
@MessageAction VARCHAR(20),
@MessageText VARCHAR(100),
@MessageName VARCHAR(20)
AS
如果字符串短于 15 个元素,则工作正常。从 SQL 管理工作室调用值长度为 15>的过程也可以正常工作。
我想到的一件事是你正在调用的过程。也许你有带有 varchar(100) 列的表,但该过程只有 varchar(15) 参数。你能发布该程序的标题吗?
感谢@erg,这是对我有用的解决方案:
char mMessageText[100];
bool initConnection()
{
(...)
// bind parameters
SQLBindParameter(mSqlStatementHandle, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, 100, 0, (SQLPOINTER)mMessageText, 100, NULL);
(...)
}
bool fillDb()
{
(...)
std::string lMessageText = "This text is longer than 15";
strcpy(mMessageText, lMessageText.c_str());
mMessageText[sizeof(mMessageText) - 1] = 0;
(...)
}
相关文章:
- 正在VS调试器中监视映射条目
- C++,指针数组,指向双链表中的条目
- Qt:当QListView获得新条目时,如何更新QStringList
- 使用cpp中的结构和函数的多个学生条目
- 两个 COM 组件中 ENUM 的重复条目
- 选择和修改嵌套向量中的条目的最佳实践
- C++:当所有条目都保证是唯一时,替代 std::map
- 将条目添加到双端 c++
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- 如何在目录迭代器中选择特定的目录条目
- 基于文件中的条目创建对象
- C++ 为每个结构{人}条目创建文件
- 我的C++程序只写入文本文件最后一个条目
- 将结构数组中的某个条目传递到函数中
- 特征::向量;在函数中使用 Eigen::Matrix3f 的值初始化向量,大于 4 个条目
- 我该如何编码,使计算机知道两个名称条目和三个名称条目之间的区别
- 将stl::vector iteratator条目传递到函数中
- 如何将带有不定条目的行读取到数字数组中?
- 替换现有条目并在 std::map 中添加新条目
- 使用 ODBC 的 MSSQL 数据库中的垃圾 varchar 条目