2009-09-25 5 views
15

지난 40 분 동안이 쿼리를 디버깅했습니다. 문제는 결국 매개 변수의 순서에 따라 결정됩니다.OleDbCommand 매개 변수 순서 및 우선 순위

SELECT * FROM tblSomeThing WHERE id = @id AND debut = @dtDebut AND fin = @dtFin 

그런 다음 매개 변수를 추가하면 두 매개 변수가 바뀌고 결과가 없습니다.

cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; 
cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin; 
cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut; 

내가 매개 변수를 선언 할 때 그들이 queury 모든 것을에 표시되는 방법은 완벽하게 작동합니다.

이 문제를 해결하기 위해 명명 된 매개 변수가 처음 생각되었습니다. 나는 무엇을 여기에서 놓치고 있냐? ...

답변

29

은 매개 변수

이름을 지원하지 않는 OLE DB .NET 공급자하지 않습니다 CommandType을로 설정하면 SQL 문 또는에서 OleDbCommand에 의해 호출 저장 프로 시저에 매개 변수를 전달하는 명명 된 매개 변수를 지원 본문. 이 경우 물음표 (?) 자리 표시자를 사용해야합니다. 예를 들어

SELECT * FROM Customers WHERE CustomerID = ? 

그러므로 OleDbParameter 개체가 OleDbParameterCollection에 추가되는 순서 직접 명령 텍스트의 파라미터 물음표 자리의 위치에 대응한다.

매개 변수 순서가 중요합니다.

+4

bizare, 그래서 매개 변수의 이름 끝에 쿼리에서 아무 상관 없어 !! – 0xFF

0

하지 긍정적 인 감사, 그러나 당신의 매개 변수가 동일한 순서로 추가하거나 자신의 쿼리의 대응 "@"로 같은 이름의 값있는 것처럼 보이지 않는다

@id, 
@dtDebut 
then 
@dateTraitementFin 
+0

예, 내 질문입니다. @를 검색어와 동일한 순서로 추가해야하는 이유는 무엇입니까? – 0xFF

3

올바르게 기억한다면 ADO.NET의 OleDbCommand이 이전 ADO 라이브러리/라이브러리 (VB6, VBA 등에서 사용됨)와 유사하게 작동하면 매개 변수 컬렉션은 매개 변수를 이름으로 정의하지 않고 컬렉션 내의 위치 . 이것은 당신이 겪고있는 행동 인 것 같습니다. http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx에서 OleDbCommand에 따르면