2009-10-08 17 views
7

Por favor, me ayudan, no sé lo que puede estar mal con el siguiente código:ASP.NET ODBC de consulta con parámetros

 OdbcConnection conn = new OdbcConnection(connString); 
     String query = "INSERT INTO customer (custId, custName, custPass, "+ 
         "custEmail, custAddress, custAge) VALUES (" + 
         "@ID, @Name, @Pass, @Email, @Address, @Age)"; 

     OdbcCommand exe = new OdbcCommand(query, conn); 
     exe.Parameters.Add("@ID", OdbcType.UniqueIdentifier).Value = id; 
     exe.Parameters.Add("@Name", OdbcType.VarChar).Value = name; 
     exe.Parameters.Add("@Pass", OdbcType.VarChar).Value = pass; 
     exe.Parameters.Add("@Email", OdbcType.VarChar).Value = email; 
     exe.Parameters.Add("@Address", OdbcType.VarChar).Value = address; 
     exe.Parameters.Add("@Age", OdbcType.Int).Value = age; 
     conn.Open(); 
     exe.ExecuteNonQuery(); // ERROR [07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 6. 

Este código me lanza Too few parameters. error cuando trato de ejecutar la consulta. La base de datos está bien, funciona bien cuando codigo valores en una consulta, en lugar de usar parámetros.

Gracias.

+1

intente cambiar pase a Passw tal vez se está mezclado con identificador asp ... – halocursed

Respuesta

31

De MSDN:

Cuando CommandType se establece como Text, el proveedor de datos de .NET Framework para ODBC hace no es compatible con pasar parámetros nombrados a una declaración de SQL o a un procedimiento almacenado llamado por un OdbcCommand. En cualquiera de estos casos, use el marcador de posición de interrogación (?). Por ejemplo:

SELECT * FROM Customers WHERE CustomerID = ? 

reescribir su consulta a

OdbcConnection conn = new OdbcConnection(connString); 
    String query = "INSERT INTO customer (custId, custName, custPass, "+ 
        "custEmail, custAddress, custAge) VALUES (" + 
        "?, ?, ?, ?, ?, ?)"; 

Orden de los recuentos de parámetros!

EDIT: El parámetro se puede añadir de esta manera:

OdbcCommand exe = new OdbcCommand(query, conn); 
exe.Parameters.Add("ID", OdbcType.UniqueIdentifier).Value = id; 
exe.Parameters.Add("Name", OdbcType.VarChar).Value = name; 
exe.Parameters.Add("Pass", OdbcType.VarChar).Value = pass; 
exe.Parameters.Add("Email", OdbcType.VarChar).Value = email; 
exe.Parameters.Add("Address", OdbcType.VarChar).Value = address; 
exe.Parameters.Add("Age", OdbcType.Int).Value = age; 
+1

muchas gracias, ayudó =) –

+1

Usando ODBC a FilMaker, esta sintaxis funcionó perfectamente en el entorno .NET, y el orden SÍ de los parámetros cuenta! –

+0

Si los parámetros de consulta no se nombran, ¿para qué sirve el primer parámetro en 'Parameters.Add()' serve? –

0

Una de sus columnas en su consulta no existe.
Por favor verifique los nombres de sus columnas.

0

Normalmente verá esto cuando escriba mal el nombre de una columna en su instrucción SQL. ¿Estás seguro de los nombres de columna (custId, custName, etc.)?

+0

Estoy bastante seguro, ya que si cambio de tercera línea de mi consulta a valores reales funciona bien. –

0

intente cambiar pase a Passw tal vez se está mezclado con identificador asp ...

+0

no ayuda, veo el mismo mensaje de error (( –

Cuestiones relacionadas