[更新:如果我对参数进行硬编码,则查询有效-因此,这与我向查询中添加参数的方式有关]

对于我的一生,我无法弄清楚这里出了什么问题。

这是传递给数据读取器的查询:

    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并保存后再使用。

10-06 13:14
查看更多