【问题标题】:Use query parameters with an ODBC connection to an iSeries AS400 database in .NET?使用 ODBC 连接到 .NET 中的 iSeries AS400 数据库的查询参数?
【发布时间】:2014-03-18 12:24:42
【问题描述】:

如果我正确理解this link,我应该能够将查询参数值传递给我的 ODBC 命令并让它成功执行。它没有,所以这是我的问题代码:

OdbcConnection myConnection = new OdbcConnection("DSN=myODBCConnection");

myConnection.Open();

OdbcCommand myCommand = myConnection.CreateCommand();

myCommand.CommandText = "SELECT * FROM MyTable FETCH FIRST ? ROWS ONLY";
myCommand.CommandType = CommandType.Text;
myCommand.Parameters.AddWithValue("P1", 5);

OdbcDataReader myDataReader;

// Fails here! It doesn't recognize P1 as a parameter to pass in for ?.
myDataReader = myCommand.ExecuteReader();

代码应从 MyTable 中选择前 5 行。相反,它会抛出此错误:

System.Data.Odbc.OdbcException: ERROR [42000] [IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL0104 - Token ? was not valid. Valid tokens: ROW ROWS.

感谢任何愿意提供帮助的人!是的,如果我执行无参数查询,它工作正常。

【问题讨论】:

  • 显然你不能像stackoverflow.com/questions/3751884/… 中讨论的那样对 FETCH FIRST ROWS 进行参数化,你可以将它直接放在 sql 字符串中或使用不同的策略
  • 这不是我的问题的答案,但由于我正在执行字符串 SQL 语句,我可能只是使用 String.Format 将我的条件作为字符串值传递,如下所示:@987654323 @.
  • 像这样的 Boklucius 错误让我想认输并加入阿米什社区。你是对的 - 我尝试参数化一个实际字段(这是我真正想做的,我只参数化了 FETCH FIRST N ROWS,因为我认为这将是一个简单的测试)和 ?参数标记工作。谢谢你的帮助!如果您想将您的评论更改为答案,我会将其标记为正确。
  • 很高兴能够提供帮助,db2 是很久以前的...

标签: c# odbc ibm-midrange


【解决方案1】:

显然,您不能像Paramertize Fetch First n Rows Only in DB2 中讨论的那样对 FETCH FIRST ROWS 进行参数化,您可以将其直接放在 sql 字符串中或使用不同的策略。

不知道怎么改评论来回答

【讨论】:

  • FETCH FIRST ROWS 不是数据库引擎的绝对指令。这是一个建议,是一个提示,告诉优化器您希望尽快看到结果,而不是最小化总运行时间。
【解决方案2】:

AFAIK,在可以确定结果数据类型的地方允许使用参数标记,例如,在 column-definition 可用的地方。请参阅PREPARE statement 下的表 1,了解允许的标记位置列表以及如何在这些位置指定标记。

由于没有必须与值兼容的“列”,因此没有进行任何开发来为 DB2 赋予这个(“获取优先”标记)任何意义。此外,由于OLAP specifications 可用于提供 ROW_NUMBER(),因此可能没有太多需求将开发工作投入到可能不太有用的查询元素中。 (如前所述,FETCH FIRST 子句通常更多地用于性能而不是严格的结果,尽管它实际上限制了结果集中可用的行数。)

如果出于某种原因需要 FETCH FIRST,则需要使用动态语句。

【讨论】:

    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多