如何使用 ODBC 将多个命名参数传递给 DB2 数据库

Posted

技术标签:

【中文标题】如何使用 ODBC 将多个命名参数传递给 DB2 数据库【英文标题】:How can I pass multiple named parameters using ODBC to a DB2 database 【发布时间】:2013-08-26 08:59:59 【问题描述】:

我必须使用现有的 ODBC 连接查询 DB2 数据库。执行简单查询按预期工作,但一旦我尝试执行参数化查询,它就不起作用:

SELECT
    ColumnA,
    ColumnB
FROM
    MyTable
WHERE
    ColumnA = ? AND
    ColumnB = ?

在其他帖子中建议使用?,但我总是得到空结果(虽然没有错误消息)。当我尝试使用命名参数的标准 SQL 方式时(并将 SQL 语句更改为ColumnA = @ColumnA AND ColumnB = @ColumnB,如下所示

odbcCommand.Parameters.AddWithValue( ColumnA", 1234 );
odbcCommand.Parameters.AddWithValue( ColumnB", 9999);

显示以下错误消息:

System.Data.Odbc.OdbcException:错误 [42S22] [IBM][CLI 驱动程序][DB2] SQL0206N “@ColumnA”在使用它的上下文中无效。 SQLSTATE=42703...

改用odbcCommand.Parameters.Add( new OdbcParameter( "ColumnA", Integer ) Value = 1234 ); 表明这已被弃用(并且也不起作用)。我想避免使用串联的 SQL 语句,但我找不到一种方法来让参数化查询对 DB2 数据库起作用。

【问题讨论】:

【参考方案1】:

您没有提及您的 DB2 版本。在 DB2 9.7 和更高版本中,有一个 driver parameter DB2NETNamedParam 来控制这种行为。检查您的db2cli.ini 文件。

我怀疑早期版本可能不支持命名参数。

【讨论】:

感谢您的建议,我回去工作会尝试检查版本。 确实似乎是版本问题,虽然花了一段时间才发现并解决它。

以上是关于如何使用 ODBC 将多个命名参数传递给 DB2 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将命名参数传递给 Rake 任务?

如何使用 Terraform local-exec 将命名参数传递给 powershell 脚本?

如何将选定的命名参数传递给 Jinja2 的包含上下文?

在 Visual Studio 2008 中使用设计器将逗号分隔列表作为参数传递给 db2 查询的 IN 子句

如何将参数传递给 ssis 中的 ado.net 源?

PowerShell 将命名参数传递给 ArgumentList