我有一个将字符串绑定到如下所示的ODBC语句的代码
std::string v = "..."; SQLBindParameter(stmt, c, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, v.size(), 0, &v[0], v.size(), 0)
它适用于任何常规字符串,但不适用于空字符串。我收到一条错误消息:
错误:[Microsoft] [ODBC SQL Server驱动程序]无效的精度值
我将函数调用更改为此
SQLBindParameter(stmt, c, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, std::max<SQLUINTEGER>(v.size(), 1), 0, &v[0], v.size(), 0)
现在可以插入空字符串,但是它将转换为空格而不是空字符串。
我不想插入NULL值,因为遇到NULL时,许多SQL语句变得违反直觉。有没有办法绑定空字符串?
(数据库引擎是带有ODBC3的SQL Server 2005)
空字符串和带一个空格的字符串在包括SQLServer在内的大多数DB的CHAR字段中都被视为相同和MicroSoft的说明,这是SQL-92规范的一部分,在这里:http://support.microsoft.com/kb/316626)。
因此,您修改后的呼叫实际上可以正常工作。
这与其他人在http://austinfrance.wordpress.com/2012/02/27/odbc-sqlbindparameter- hy104-howto-bind-an-empty-string-to-an-sql_varchar/上报告的解决此问题的方式相同。
因此,要绑定空的(零长度)C字符串,我们只需将其绑定到租约大小为1的参数即可。