gpt4 book ai didi

c++ - 使用 ODBC 的 MSSQL 数据库中的垃圾 varchar 条目

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:35 24 4
gpt4 key购买 nike

我正在尝试将字符串变量插入到 varchar(100) 字段中,但如果字符串的长度超过 15 个元素,则只会插入垃圾(例如“0‰?”)。

首先我的设置:

开发:Win7(64位)/VS2013/C++11/64位应用

数据库:Win8(64 位)/Microsoft SQL Server Express 2014(64 位)

驱动程序:SQL Server Native Client 11.0

第二个参数的绑定(bind):

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 Management Studio 中调用值长度大于 15 的过程也能正常工作。

最佳答案

我想到的一件事是您正在调用的过程。也许您有包含 varchar(100) 列的表,但该过程只有 varchar(15) 参数。您可以发布该程序的标题吗?

关于c++ - 使用 ODBC 的 MSSQL 数据库中的垃圾 varchar 条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30861836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com