一尘不染

ODBC:如何绑定一个空字符串?

sql

我有一个将字符串绑定到如下所示的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)


阅读 143

收藏
2021-05-23

共1个答案

一尘不染

空字符串和带一个空格的字符串在包括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的参数即可。

2021-05-23