[更新:如果我对参数进行硬编码,则查询有效-因此,这与我向查询中添加参数的方式有关]
对于我的一生,我无法弄清楚这里出了什么问题。
这是传递给数据读取器的查询:
SELECT * FROM (SELECT TOP ? StartDate, [ID] FROM
(SELECT TOP ? StartDate, [ID] FROM Story
ORDER BY StartDate DESC, [ID] DESC) AS foo
ORDER BY StartDate ASC, [ID] ASC) AS bar
INNER JOIN Story AS t ON bar.ID = t.ID
ORDER BY bar.StartDate DESC, bar.[ID] DESC
这些参数按以下顺序添加:
var pNumToRetrieve = new OleDbParameter("", OleDbType.Integer) {Value = numToGet};
var pResultSet = new OleDbParameter("", OleDbType.Integer) {Value = resultSet};
_cmd.Parameters.Add(pNumToRetrieve);
_cmd.Parameters.Add(pResultSet);
如果我直接在访问中输入此查询,它将正常工作。但是,从ASP.NET运行查询时,出现以下错误:
SELECT语句包含一个保留字或一个拼写错误或丢失的参数名称,或者标点符号不正确。
我究竟做错了什么?
谢谢,
亚当
最佳答案
Jet SQL的TOP N个查询中的N个不能参数化。您必须即时编写SQL字符串以获取变量N。这意味着要么不能使用保存的QueryDef,要么必须编辑QueryDef的SQL并保存后再使用。