ODBC:如何绑定空字符串?

时间:2014-07-03 05:20:55

标签: c++ sql odbc

我有一个代码将字符串绑定到看起来像这个

的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)

1 个答案:

答案 0 :(得分:2)

空字符串和一个空格的字符串在大多数数据库的CHAR字段中都被视为相同,包括SQLServer(例如,参见SQL Server 2008 Empty String vs. Space和MicroSoft解释,这是SQL-92规范的一部分:{{3 }})。

所以你的修改过的电话实际上是正常的。

这与其他人报告在http://support.microsoft.com/kb/316626

解决此问题的方式相同
  

因此,为了允许绑定空(零长度)C字符串,我们需要   只需将其绑定到租赁大小为1的参数。