我目前正在连接并使用 MS Access 数据库。我可以很好地执行通用的 select * 查询,因此我已连接到数据库,但是当我尝试使用参数进行选择时,它会抛出一个缺少运算符的异常。
string selectStatement = "Select ID from pages where page_title = ? limit 1";
string title = Request.QueryString["pagetitle"];
OleDbCommand selectCommand = new OleDbCommand(selectStatement, conn);
selectCommand.Parameters.Add("@p1",OleDbType.VarChar);
selectCommand.Parameters["@p1"].Value = System.Web.HttpUtility.UrlDecode(title);
OleDbDataReader selectResult = selectCommand.ExecuteReader();
我得到的错误是在 ExecuteReader 行上:
异常详细信息:System.Data.OleDb.OleDbException:查询表达式 'page_title = ? 中的语法错误(缺少运算符)限制 1'。
我试过在查询中使用@p1,以及当前的?。我试过以不同的方式添加参数,包括删除参数名称中的 @。似乎没有任何效果。有人可以指出我正确的方向吗?
最佳答案
据我所知,MS Access 中没有 LIMIT
子句。
并且,参数应该命名为 @p1
在您的情况下,而不是 ?
我已经多年没有使用 Access,所以我可能是错的,但是不要使用 LIMIT
,而是试试这个:
Select TOP 1 ID from pages where page_title = @p1
此外,如果合适,请考虑以下建议:
MS Access 不是处理网站的正确 DBMS(我怀疑你的情况是网站)。对于替代的基于文件的数据库管理系统,请检查 SQLite和 FirebirdSQL .两者都有许多可用于 GUI 的工具,例如 SQLite Maestro 和 IBExpert。
这些 DBMS 中的查询更加灵活。
关于C# OleDb 选择查询抛出缺少运算符异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236947/