当前位置: 首页 > 面试题库 >

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

公孙宗清
2023-03-14
问题内容

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



 类似资料:
  • 我的程序是包客户端; 我得到了一个javax.naming.NameNotFoundException:myHelloWorld没有边界。我试图使用initialContext.bind绑定它(“myHelloWorld”,null);但是得到了一个NullPointerException。我的jndi.properties包括

  • 问题内容: 我尝试这样做: 但它不起作用。“ mystring”是对象上的字符串,例如“ my string is this”,带有要从视图中删除的空格。 问题答案: 只需创建一个专用过滤器: 并这样称呼:

  • 问题内容: 在Java中,有没有一种方法可以确定字符串的第一个字符是否为数字? 一种方法是 并一直执行到9点,但这似乎效率很低。 问题答案: 请注意,这将允许使用 任何 Unicode数字 ,而不仅仅是0-9。您可能更喜欢: 或较慢的正则表达式解决方案: 但是,使用这些方法中的任何一种,必须首先确保该字符串不为空。如果是,而且将引发。没有这个问题。 要使整个条件只占一行,并避免长度检查,可以将正则

  • 问题内容: 我看到了这个问题,但是没有看到JavaScript特定的示例。JavaScript中是否有一个简单的可用工具,还是仅用于检查的情况? 问题答案: 如果您只想检查是否有任何价值,可以 如果您需要专门为在空空字符串检查,我想核对是你最好的选择,使用的运营商(让你知道这是,事实上,一个字符串你比较反对)。

  • 问题内容: 我是Java的新手,为了实践起见,我试图创建一个十六进制到十进制的数字转换器,因为我已经成功地制作了一个二进制到十进制的转换器。 我遇到的问题基本上是将一个字符串中的给定字符与另一个字符串进行比较。这就是我定义要比较的当前字符的方式: 这是我尝试比较角色的方法: 当我尝试通过仅输入数字(例如12)来运行代码时,它可以工作,但是当我尝试使用“ b”时,会出现一个奇怪的错误。这是运行程序的

  • 问题内容: 有一个大写字符串的函数,我希望能够更改字符串的第一个字符以确保它是小写的。 如何在Python中做到这一点? 问题答案: 一线处理空字符串和: