gpt4 book ai didi

c++ - 使用 C++ 和 SQL Native Client 为 SQLPutData 准备的 SQLBindParameter

转载 作者:行者123 更新时间:2023-11-30 02:13:30 24 4
gpt4 key购买 nike

我正在尝试使用 SQLBindParameter 准备我的驱动程序以通过 SQLPutData 输入。数据库中的字段是一个TEXT 字段。我的功能是根据此处 MS 的示例制作的: http://msdn.microsoft.com/en-us/library/ms713824(VS.85).aspx .

我已经设置了环境,建立了连接,并成功地准备了我的语句,但是当我调用 SQLBindParam(使用下面的代码)时,它总是报告失败:[Microsoft][SQL Native客户端]无效的精度值

int col_num = 1;
SQLINTEGER length = very_long_string.length( );
retcode = SQLBindParameter( StatementHandle,
col_num,
SQL_PARAM_INPUT,
SQL_C_BINARY,
SQL_LONGVARBINARY,
NULL,
NULL,
(SQLPOINTER) col_num,
NULL,
&length );

以上内容依赖于正在使用的驱动程序在 SQLGetInfo 中为 SQL_NEED_LONG_DATA_LEN 信息类型返回“N”。我的司机返回“Y”。如何绑定(bind)才能使用 SQLPutData

最佳答案

虽然它看起来不像文档中的示例代码,但我发现以下解决方案可以实现我想要完成的目标。感谢 gbjbaanb 让我重新测试 SQLBindParameter 的输入组合。

    SQLINTEGER length;
RETCODE retcode = SQLBindParameter( StatementHandle,
col_num, // position of the parameter in the query
SQL_PARAM_INPUT,
SQL_C_CHAR,
SQL_VARCHAR,
data_length, // size of our data
NULL, // decimal precision: not used our data types
&my_string, // SQLParamData will return this value later to indicate what data it's looking for so let's pass in the address of our std::string
data_length,
&length ); // it needs a length buffer

// length in the following operation must still exist when SQLExecDirect or SQLExecute is called
// in my code, I used a pointer on the heap for this.
length = SQL_LEN_DATA_AT_EXEC( data_length );

语句执行后,您可以使用 SQLParamData 来确定 SQL 要您发送的数据,如下所示:

    std::string* my_string;
// set string pointer to value given to SQLBindParameter
retcode = SQLParamData( StatementHandle, (SQLPOINTER*) &my_string );

最后,使用 SQLPutData 将字符串的内容发送到 SQL:

    // send data in chunks until everything is sent
SQLINTEGER len;
for ( int i(0); i < my_string->length( ); i += CHUNK_SIZE )
{
std::string substr = my_string->substr( i, CHUNK_SIZE );

len = substr.length( );

retcode = SQLPutData( StatementHandle, (SQLPOINTER) substr.c_str( ), len );
}

关于c++ - 使用 C++ 和 SQL Native Client 为 SQLPutData 准备的 SQLBindParameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/84064/

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