关于OleDBCommand的update问题。

ajou 2004-09-20 06:28:28
try
{
cmd.CommandText = "UPDATE userTable SET Password = @newPassword WHRER userID = @theUserID";
cmd.Parameters.Add(new OleDbParameter("@theUserID", OleDbType.Integer)).Value = UserID;
cmd.Parameters.Add(new OleDbParameter("@newPassword", OleDbType.VarChar, 50)).Value = textBox2.Text.ToString();
cmd.Connection = con;
//MessageBox.Show(cmd.CommandText);
cmd.ExecuteNonQuery();
MessageBox.Show("更改密码成功","提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

this.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
con.Close();
}


其中con连接的是本地access的数据库,UserID是主Form传递过来的int值,没有问题。运行时为什么总是提示update语句的语法错误?百思不得其解阿。各位请支招。谢谢。
...全文
455 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajou 2004-09-21
  • 打赏
  • 举报
回复
问题解决了,解决办法如下,在ACCESS里建了一个查询。用C#里的存储过程解决了问题。

还是存储过程好啊。

散分。谢谢: Firestone2003(笨笨小猪)的提示。谢谢 wtadminxjeri(P42.4) 的火眼金睛。谢谢大家。呵呵
ajou 2004-09-21
  • 打赏
  • 举报
回复
现在UPDATE应该没写错了,在ACCESS里运行没有问题阿。
joecfan 2004-09-21
  • 打赏
  • 举报
回复
cmd.CommandText = "UPDATE userTable SET Password = :newPassword WHRER userID = :theUserID";
cmd.Parameters.Add(new OleDbParameter("theUserID", OleDbType.Integer)).Value = UserID;
这样行不
joecfan 2004-09-21
  • 打赏
  • 举报
回复
cmd.CommandText = "UPDATE userTable SET Password = :newPassword WHRER userID = :theUserID";
cmd.Parameters.Add(new OleDbParameter("theUserID", OleDbType.Integer)).Value = UserID;
这样行不
ajou 2004-09-21
  • 打赏
  • 举报
回复
将CMD的UPDATE语句换成SELECT 语句后执行没任何问题@_@
ajou 2004-09-21
  • 打赏
  • 举报
回复
各位的方法还是不行啊。
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

ajou 2004-09-21
  • 打赏
  • 举报
回复
ArEoN(今天突然下起了小雪) 逗死我了
我的WHERE也写错了。改过去后还是不行。我看看是不是占位符的问题。
ArEoN 2004-09-20
  • 打赏
  • 举报
回复
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()));
ArEoN 2004-09-20
  • 打赏
  • 举报
回复
倒~~
改一下
cmd.CommandText = "UPDATE userTable SET Password = ? WHERR userID = ?";
cmd.Parameters.Add(new OleDbParameter(null,UserID));
cmd.Parameters.Add(new OleDbParameter(null,textBox2.Text.ToString()));
ArEoN 2004-09-20
  • 打赏
  • 举报
回复
这样试试
cmd.CommandText = "UPDATE userTable SET Password = ? WHRER userID = ?";
cmd.Parameters.Add(new OleDbParameter(null,UserID));
cmd.Parameters.Add(new OleDbParameter(null,textBox2.Text.ToString()));
wtadminxjeri 2004-09-20
  • 打赏
  • 举报
回复
cmd.CommandText = "UPDATE userTable SET Password = @newPassword WHRER userID = @theUserID";
|
|
cmd.CommandText = "UPDATE userTable SET Password = @newPassword WHere userID =
@theUserID";

是where 而不是whrer
Firestone2003 2004-09-20
  • 打赏
  • 举报
回复
如果 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();


111,110

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧