如果 CommandType 设置为 Text,OLE DB .NET 提供程序不支持将参数传递给 OleDbCommand 调用的 SQL 语句或存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。例如:SELECT * FROM Customers WHERE CustomerID = ?
因此,向 OleDbParameterCollection 添加 OleDbParameter 对象的顺序必须直接对应于该参数的问号占位符在命令文本中的位置。所以你的代码应该改为
cmd.CommandText = "UPDATE userTable SET Password = ? WHRER userID = ?";
cmd.Parameters.Add(new OleDbParameter("@theUserID", OleDbType.Integer)).Value = UserID;
         cmd.Parameters.Add(new OleDbParameter("@newPassword", OleDbType.VarChar, 50)).Value = textBox2.Text.ToString();

解决方案 »

  1.   

    cmd.CommandText = "UPDATE userTable SET Password = @newPassword WHRER userID = @theUserID";
    |
    |
    cmd.CommandText = "UPDATE userTable SET Password = @newPassword WHere userID = 
    @theUserID";是where 而不是whrer
      

  2.   

    这样试试
    cmd.CommandText = "UPDATE userTable SET Password = ? WHRER userID = ?";
    cmd.Parameters.Add(new OleDbParameter(null,UserID));
    cmd.Parameters.Add(new OleDbParameter(null,textBox2.Text.ToString()));
      

  3.   

    倒~~
    改一下
    cmd.CommandText = "UPDATE userTable SET Password = ? WHERR userID = ?";
    cmd.Parameters.Add(new OleDbParameter(null,UserID));
    cmd.Parameters.Add(new OleDbParameter(null,textBox2.Text.ToString()));
      

  4.   

    where还是写错了,晕死~~
    cmd.CommandText = "UPDATE userTable SET Password = ? WHERE userID = ?";
    cmd.Parameters.Add(new OleDbParameter(null,UserID));
    cmd.Parameters.Add(new OleDbParameter(null,textBox2.Text.ToString()));
      

  5.   

    ArEoN(今天突然下起了小雪) 逗死我了
    我的WHERE也写错了。改过去后还是不行。我看看是不是占位符的问题。
      

  6.   

    各位的方法还是不行啊。
    UPDATE语法错误。全部EXCEPTION抛出如下:
    ************** 异常文本 **************
    System.Data.OleDb.OleDbException: UPDATE 语句的语法错误。
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
       at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
       at M2M.ModifyPasswordUI.button1_Click(Object sender, EventArgs e) in d:\material\material\user\modifypasswordui.cs:line 215
      
      

  7.   

    将CMD的UPDATE语句换成SELECT 语句后执行没任何问题@_@
      

  8.   

    cmd.CommandText = "UPDATE userTable SET Password = :newPassword WHRER userID = :theUserID";
    cmd.Parameters.Add(new OleDbParameter("theUserID", OleDbType.Integer)).Value = UserID;
    这样行不
      

  9.   

    cmd.CommandText = "UPDATE userTable SET Password = :newPassword WHRER userID = :theUserID";
    cmd.Parameters.Add(new OleDbParameter("theUserID", OleDbType.Integer)).Value = UserID;
    这样行不
      

  10.   

    现在UPDATE应该没写错了,在ACCESS里运行没有问题阿。
      

  11.   

    问题解决了,解决办法如下,在ACCESS里建了一个查询。用C#里的存储过程解决了问题。还是存储过程好啊。散分。谢谢: Firestone2003(笨笨小猪)的提示。谢谢 wtadminxjeri(P42.4) 的火眼金睛。谢谢大家。呵呵