2011-03-08 2 views
1

현재 MS Access 데이터베이스에 연결하고 있습니다. 나는 일반적인 select * 질의를 할 수있어 db에 연결되어 있지만 매개 변수를 사용하여 선택하려고하면 누락 된 연산자 예외가 발생합니다.C# OleDb select 쿼리에서 누락 된 연산자 예외가 throw됩니다.

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 라인에 : 나는 현재뿐만 아니라, 쿼리 내부 @ P1을 사용하려고했습니다

Exception Details: System.Data.OleDb.OleDbException: Syntax error (missing operator) in query expression 'page_title = ? limit 1'.

?. 매개 변수 이름에 @를 제거하는 것을 포함하여 여러 가지 방법으로 매개 변수를 추가하려고했습니다. 아무것도 작동하는 것 같습니다. 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

답변

4

AFAIK, MS Access에는 LIMIT 절이 없습니다. 귀하의 경우 매개 변수를 지정해야합니다

그리고, @p1, 대신 ?

대신 LIMIT의, 내가 년의 액세스와 함께 근무 한 적이없는, 그래서 내가 잘못 될 수도,이 시도 :

MS 액세스 (나는 귀하의 경우 의심이 웹 사이트의) 웹 사이트를 처리하기 위해 매우 적합한 DBMS되지 않습니다 : 해당되는 경우

Select TOP 1 ID from pages where page_title = @p1 

또한,이 조언을 고려하십시오. 다른 파일 기반 데이터베이스 관리 시스템의 경우 SQLiteFirebirdSQL을 확인하십시오. 두 가지 모두 SQLite Maestro와 IBExpert와 같이 GUI에 사용할 수있는 많은 도구가 있습니다.
쿼리는 해당 DBMS에서보다 유연합니다.

+0

합법적? 그 냄새가 xD 그러나 이것은 질문을 해결합니다. 빠른 답변 감사합니다! – MishieMoo

+0

또한 웹 사이트가 아닙니다. 나는 지역 자동화 테스트를하고있어, 아무도 나에게 이것을 보지 않을 것이다. 나는 PHP/MySQL에서 일반적으로 작동하지만,이 컴퓨터에는 이들을 설치할 수 없으므로이 모든 일은 일종의 kludgey입니다 (20 분 내에 완료 할 수있을 때 C#으로 끝내려면 4 시간 이상이 걸렸습니다!). 이 머신에 다른 DBMS를 설치할 수도 없습니다. 그래서 제 옵션은 제한적이었습니다 =) – MishieMoo

+0

그래도 이런 식으로 다시해야한다면 FirebirdSQL을 사용해보십시오. 설치할 필요가 없습니다. 응용 프로그램 폴더에 복사 된 라이브러리 더미 만 있으면됩니다. 그리고'SELECT FIRST 10 SKIP 20 * FROM table'과 같은 질의를 할 수 있습니다. 많은 DBMS (Access 중 하나)에서 행을 "건너 뛸"수 없으며 항상 WHERE 절에 이것을 배치하는 더 복잡한 방법이 있습니다 (예 : 21 ~ 30 사이의 WHwn WHERE 절). 또는 뭔가. – AlexanderMP

관련 문제