ASP.NET ODBC Query with parameters

17,818

From MSDN:

When CommandType is set to Text, the .NET Framework Data Provider for ODBC does not support passing named parameters to an SQL statement or to a stored procedure called by an OdbcCommand. In either of these cases, use the question mark (?) placeholder. For example:

SELECT * FROM Customers WHERE CustomerID = ?

Rewrite your query to

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

Order of Parameter counts!

EDIT: Parameter can be added this way:

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;
Share:
17,818
Maksim Vi.
Author by

Maksim Vi.

Software developer in an online social entertainment company

Updated on August 03, 2022

Comments

  • Maksim Vi.
    Maksim Vi. almost 2 years

    Please help me, I don't know what can be wrong with the following code:

            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. 
    

    This code throws me Too few parameters. error when I am trying to execute query. The database is fine, it works fine when I hardcode values into a query, instead of using parameters.

    Thank you.

  • Maksim Vi.
    Maksim Vi. over 14 years
    i am pretty sure, since if I change third line of my query to actual values it works fine.
  • Amberlea Moore
    Amberlea Moore almost 11 years
    Using ODBC to FilMaker, this syntax worked perfectly in .NET environment, and YES order of the parameters count!
  • THE JOATMON
    THE JOATMON over 7 years
    If the query parameters aren't named, what purpose does the first parameter in Parameters.Add() serve?
  • Arthur
    Arthur over 7 years
    @Scott: Other Data Provider are using named parameter. So I guess the reason is to have same API
  • Ben Keene
    Ben Keene over 5 years
    You may still want to use names so you can look up the parameter to set the parameter for subsequent calls. I haven't tried it in OdbcCommand yet, but they are useful for other database providers.