2009-09-25 13 views
15

He estado depurando esta consulta durante los últimos 40 minutos, y el problema aparentemente es el orden de los parámetros después de todo.Parámetros OleDbCommand orden y prioridad

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

Luego añadir los parámetros de esta manera, observe que los dos últimos parámetros se cambian, no da resultados positivos.

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

Cuando Declaro los parámetros de la forma en que aparecen en el queury todo funciona perfectamente.

¡Pensé que los parámetros nombrados estaban en primer lugar para solucionar este problema! ¿que me estoy perdiendo aqui?

Gracias

Respuesta

29

Según http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx OleDbCommand no soporta nombrado parámetro

El proveedor OLE DB .NET no admite parámetros con nombre para pasar parámetros a una instrucción SQL o un procedimiento almacenado llamado por un OleDbCommand cuando se establece en CommandType Texto. En este caso, se debe usar el marcador de posición de interrogación (?). Por ejemplo:

SELECT * FROM Customers WHERE CustomerID = ? 

Por lo tanto, el orden en que se añaden objetos OleDbParameter a la OleDbParameterCollection debe corresponder directamente a la posición del marcador de posición signo de interrogación para el parámetro en el texto de comando.

El orden del parámetro es importante.

+4

bizare, por lo que el nombre de los parámetros no tiene nada que ver en la consulta al final. – 0xFF

0

No es positivo, pero no se ve como sus parámetros se añaden en la misma secuencia, ni los mismos valores nombrados como su "@" homólogos de la consulta ...

@id, 
@dtDebut 
then 
@dateTraitementFin 
+0

Sí, esa es mi pregunta, ¿por qué tengo que agregarlos con el mismo orden que el @ en la consulta? – 0xFF

3

Si recuerdo correctamente, si el OleDbCommand en ADO.NET funciona de manera similar a la librería/bibliotecas ADO más antiguas (usadas en VB6, VBA, etc.) entonces la colección de parámetros no define parámetros por nombre, solo por posición dentro de la colección . Este parece ser el comportamiento que estás experimentando.

Cuestiones relacionadas