C# OleDb 选择查询抛出缺少运算符异常

标签 c# ms-access oledb

我目前正在连接并使用 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(我怀疑你的情况是网站)。对于替代的基于文件的数据库管理系统,请检查 SQLiteFirebirdSQL .两者都有许多可用于 GUI 的工具,例如 SQLite Maestro 和 IBExpert。
这些 DBMS 中的查询更加灵活。

关于C# OleDb 选择查询抛出缺少运算符异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236947/

相关文章:

c# - 使用二进制列作为比较标准

c# - 如何恢复与 WCF 的连接?

c# - 如何强制所有程序线程在程序关闭时退出?

vb.net - OLEDB 连接无法连接到 Access 2013 数据库

c++ - 如何使用新的 SQL Server Native Client 将 datetime 迁移到 datetime2

ms-access - 更改表 : Add a new boolean column with default value and checkbox

c# - lambda 表达式 C#

c# - 为什么 Process.PrivateMemorySize64/1024 与 Windows 任务管理器内存(专用工作集)不匹配?

ms-access - 如何将一行中的字段转换为列?

c# - Access : Invalid UPDATE statement