代码之家  ›  专栏  ›  技术社区  ›  Maksim Vi.

带参数的ASP.NET ODBC查询

  •  7
  • Maksim Vi.  · 技术社区  · 16 年前

            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. 
    

    这个密码让我 Too few parameters. 尝试执行查询时出错。数据库很好,当我将值硬编码到查询中而不是使用参数时,它工作正常。

    非常感谢。

    4 回复  |  直到 13 年前
        1
  •  32
  •   bluish dmajkic    13 年前

    从MSDN:

    SELECT * FROM Customers WHERE CustomerID = ?
    

    将查询重写为

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

    参数计数的顺序!

    编辑:可以通过以下方式添加参数:

    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;
    
        2
  •  0
  •   Myra    16 年前


    请检查您的列名。

        3
  •  0
  •   Cam Soper    16 年前

    通常,当您在SQL语句中拼写错误列名时,您会看到这一点。您确定这些列名(custId、custName等)吗?

        4
  •  0
  •   halocursed    16 年前

    尝试将pass更改为passw可能与asp标识符混淆。。。