2011-03-08 65 views
1

我目前正在連接並使用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的查詢中作爲當前嘗試,以及?我試過以不同的方式添加參數,包括刪除參數名稱中的@。似乎沒有任何工作。有人能指引我朝着正確的方向嗎?

回答

4

AFAIK,MS Access中沒有LIMIT子句。

而且,參數應該被命名爲@p1你的情況,而不是?

我還沒有與多年接入工作,所以我可能是錯的,但不是LIMIT,試試這個:

Select TOP 1 ID from pages where page_title = @p1 

而且,如果合適的話,可以考慮這樣的建議:

MS Access是不太合適的DBMS處理網站(我懷疑你的情況這是一個網站)。對於另一種基於文件的數據庫管理系統,請檢查SQLiteFirebirdSQL。兩者都有很多可用於GUI的工具,如SQLite Maestro和IBExpert。
查詢在這些DBMS中更加靈活。

+0

Legit?這太臭xD但這解決了這個問題。感謝您及時的回覆! – MishieMoo 2011-03-08 19:06:04

+0

此外,這不是一個網站。我正在做一些本地的自動化測試,除了我之外,沒有人會看到這個。我通常使用PHP/MySQL工作,但是我無法在這臺機器上安裝這些工具,所以這整件事情都非常糟糕(我花了4個多小時才用C#完成了這項工作,我可以在20分鐘內完成這項工作!)。我也不能在這臺機器上安裝任何其他DBMS。所以我的選擇是有限的=) – MishieMoo 2011-03-08 19:15:48

+0

不過,如果你再次需要這樣的東西,嘗試FirebirdSQL。不需要安裝,只需將一堆庫複製到應用程序文件夾中即可。你可以做一些查詢,比如'SELECT FIRST 10 SKIP 20 * FROM table'。你不能在許多數據庫管理系統中「跳過」行(Access是其中之一),總是有一種更復雜的方式將它放在'WHERE'子句中,比如'... WHERE rownum在21和30之間'或者其他的東西。 – AlexanderMP 2011-03-08 19:21:04