先贴代码吧:
 public override bool ValidateUser(string username, string password)
    {
      bool isValid = false;
      OdbcConnection conn = new OdbcConnection(connectionString);
      OdbcCommand cmd = new OdbcCommand("SELECT Password, IsApproved FROM [" + tableName + "] WHERE Username = ? AND ApplicationName = ? AND IsLockedOut = False", conn);
      cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
      cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;
      OdbcDataReader reader = null;
      try
      {
        conn.Open();//正常        reader = cmd.ExecuteReader(CommandBehavior.SingleRow); //异常
         //异常信息如下:
         ERROR [07002] [Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 3。
      }
     }
  不复杂吧,学过C#的人都会,可我就纳闷会报这个错。哪位高手指点下

解决方案 »

  1.   


     public override bool ValidateUser(string username, string password) 
        { 
          bool isValid = false; 
          OdbcConnection conn = new OdbcConnection(connectionString); 
          OdbcCommand cmd = new OdbcCommand("SELECT [Password], [IsApproved] FROM [" + tableName + "] WHERE [Username] = @Username AND ApplicationName = @pApplicationName AND IsLockedOut = 0", conn); 
          cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username; 
          cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName; 
          OdbcDataReader reader = null; 
          try 
          { 
            conn.Open();//正常         reader = cmd.ExecuteReader(CommandBehavior.SingleRow); //异常 
          } 
         }
      

  2.   

    tableName
    应该是这个参数的问题吧?
    你没给它值。
    所以少一个参数
      

  3.   

    取出CommandText,copy到Access 试一下不就知道啦
      

  4.   

    为什么要用odbc???用oledbconnection 或者sqlconnection都可以。
           OleDbConnection conn = new OleDbConnection("");                OleDbCommand cmd = new OleDbCommand(SELECT [Password], IsApproved FROM " + tableName + " WHERE [Username] = @Username AND ApplicationName = @pApplicationName AND IsLockedOut = 0", conn);
                    OleDbParameter[] parames = new OleDbParameter[] { new OleDbParameter("@Username", OdbcType.VarChar),
                     new OleDbParameter("@applicationname", OdbcType.VarChar)};
                    parames[0].Value = "";
                    parames[1].Value = "";
                    cmd.Parameters.AddRange(parames);
                    cmd.Connection.Open();
                    OleDbDataReader reader = cmd.ExecuteReader();
      

  5.   

    http://blog.csdn.net/zhoufoxcn/archive/2008/03/19/2195618.aspx
    请看这篇文章,我说得很清楚了。
    它们不是按照字段名,而是按照字段顺序来的。
      

  6.   

    tableName connectionString这两个参数是类的成员。在类初始化的时候从配置文件读出来的。调试看过没问题。
    9楼的文章我大概看了下。没明白你的意思。
    8楼的建议正在实施中。、
      

  7.   

      public override bool ValidateUser(string username, string password)
        {
            bool isValid = false;
            OleDbConnection conn = new OleDbConnection(connectionString);
            string sql = "select [Password],IsApproved From [" + tableName + "] where Username=@Username and ApplicationName=@applicationName";
            OleDbCommand cmd = new OleDbCommand(sql, conn);
         
            OleDbParameter parmUserName = new OleDbParameter("@Username", OleDbType.VarChar, 255);
            parmUserName.Value = username;
            cmd.Parameters.Add(parmUserName);        OleDbParameter parmApplicationName = new OleDbParameter("@ApplicationName", OleDbType.VarChar, 255);
            parmApplicationName.Value = pApplicationName;
            cmd.Parameters.Add(parmApplicationName);
                   OleDbDataReader reader = null;
            bool isApproved = false;
            string pwd = "";        try
            {
                conn.Open();            reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
                  //至少有一个参数没有被指定值。
                    //我在即时窗口打出来的信息
                     //cmd.CommandText
                  "select [Password],IsApproved From [Users] where Username=@Username and ApplicationName=@applicationName"
                    //cmd.Parameters.Count
                     //2
                    //cmd.Parameters[0].Value
                     //"q"
                   //cmd.Parameters[1].Value
                     //"/WebUI"
                if (reader.HasRows)
                {
                    reader.Read();
                    pwd = reader.GetString(0);
                    isApproved = reader.GetBoolean(1);
                }
                else
                {
                    return false;
                }            reader.Close();
             catch()
            {
             }
       
            return isValid;
        }
    我要疯了,高手救命