【发布时间】: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