2017-07-18 112 views
0

ALL,的SQLBindParameter返回-1

我的代码如下:

std::wstring ownerName = table->GetTableOwner(); 
SQLWCHAR *owner_name = new SQLWCHAR[ownerNameLen + 2]; 
int ownerNameLen = ownerName.length(); 
SQLLEN cbOwnerName = ownerNameLen == 0 ? SQL_NULL_DATA : SQL_NTS; 
ret = SQLBindParameter(stmt_tableProp, 2, SQL_PARAM_INPUT, SQL_C_WCHAR, SQL_WCHAR, ownerNameLen, 0, owner_name, 0, &cbOwnerName); 

当OWNER_NAME包含实际数据的SQLBindParameter调用成功。但是,如果owner_name是“”,则呼叫失败。而我收到的错误信息是“HY104 - 无效的精度或比例值”。

根据MSDN,它看起来像大小的值应该是列的大小,而不是实际参数的大小。它是否正确?或者我应该传递0作为绑定值的长度?

此外,还有this page它使用不同的值。

请问有人可以摆脱一些光线吗?

TIA!

+0

从页,你链接:_The长度值必须至少为1(不要问我为什么),否则你得到足够的错误message._看来答案是正确的呢? –

回答

1

传递ownerNameLen值的SqlBindParameter中的参数应该包含列大小,而不是可变大小。根据文档,这是您正在使用的列数据类型(SQL_WCHAR)所要求的内容。以下是指向文档的链接。查找“ColumnSize参数”并亲自查看。

SqlBindParameter doc