2009-09-25 13 views
15

Debugowałem to zapytanie przez ostatnie 40 minut, a problem najwyraźniej jest kolejnością parametrów.Kolejność i kolejność parametrów OleDbCommand

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

Następnie dodaję parametry w ten sposób, zauważ, że dwa ostatnie parametry są przełączone, nie otrzymuję wyników.

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

Kiedy deklaruję parametry w taki sposób, w jaki pojawiają się w czasie, wszystko działa idealnie.

Myślałem, że nazwane parametry były na pierwszym miejscu, aby rozwiązać ten problem! czego tu brakuje?

Dziękuję

Odpowiedz

29

Według http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx OleDbCommand nie obsługuje nazwany parametr

OLE DB .NET Provider nie obsługuje nazwanych parametrów dla przekazywania parametrów do SQL lub procedura przechowywana zwanego przez OleDbCommand CommandType gdy jest ustawiony na Tekst. W takim przypadku należy użyć znaku zastępczego (?). Na przykład:

SELECT * FROM Customers WHERE CustomerID = ? 

Dlatego, kolejność, w jakiej obiekty OleDbParameter są dodawane do OleDbParameterCollection musi bezpośrednio odpowiadać na stanowisko zastępczego znaku zapytania dla parametru w tekście polecenia.

Zatem kolejność parametrów jest ważna.

+4

bizare, więc nazwa parametrów nie ma nic wspólnego z zapytaniem na końcu !! – 0xFF

0

Nie pozytywne, ale to nie wygląda twoje parametry są dodawane w tej samej kolejności, ani same wartości jak ich nazwie „@” odpowiedniki zapytania ...

@id, 
@dtDebut 
then 
@dateTraitementFin 
+0

tak, to jest moje pytanie, dlaczego muszę dodać je w takiej samej kolejności, jak @ w zapytaniu? – 0xFF

3

Jeśli poprawnie pamiętam, jeśli funkcja OleDbCommand w ADO.NET działa podobnie do starszej biblioteki/bibliotek ADO (używanej w VB6, VBA itp.), Wówczas zbiór parametrów nie definiuje parametrów według nazwy, tylko według pozycji w kolekcji . To wydaje się być zachowanie, którego doświadczasz.