我目前正在连接并使用MS Access数据库。我可以做一个通用选择*查询罚款,所以我连接到数据库,但是当我尝试选择使用参数它会引发一个缺少的操作员异常。C#OleDb选择查询抛出缺少运算符异常
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行:
Exception Details: System.Data.OleDb.OleDbException: Syntax error (missing operator) in query expression 'page_title = ? limit 1'.
我使用@ P1的查询中作为当前尝试,以及?我试过以不同的方式添加参数,包括删除参数名称中的@。似乎没有任何工作。有人能指引我朝着正确的方向吗?
Legit?这太臭xD但这解决了这个问题。感谢您及时的回复! – MishieMoo 2011-03-08 19:06:04
此外,这不是一个网站。我正在做一些本地的自动化测试,除了我之外,没有人会看到这个。我通常使用PHP/MySQL工作,但是我无法在这台机器上安装这些工具,所以这整件事情都非常糟糕(我花了4个多小时才用C#完成了这项工作,我可以在20分钟内完成这项工作!)。我也不能在这台机器上安装任何其他DBMS。所以我的选择是有限的=) – MishieMoo 2011-03-08 19:15:48
不过,如果你再次需要这样的东西,尝试FirebirdSQL。不需要安装,只需将一堆库复制到应用程序文件夹中即可。你可以做一些查询,比如'SELECT FIRST 10 SKIP 20 * FROM table'。你不能在许多数据库管理系统中“跳过”行(Access是其中之一),总是有一种更复杂的方式将它放在'WHERE'子句中,比如'... WHERE rownum在21和30之间'或者其他的东西。 – AlexanderMP 2011-03-08 19:21:04