【问题标题】:Incorrect syntax in update query: Unable to find one更新查询中的语法不正确:找不到
【发布时间】:2013-02-18 05:29:49
【问题描述】:

我在我的 ASP.NET 应用程序中的一个 SQL 查询中遇到一个奇怪的错误。我正在尝试更新 MS Access 表行,以下是我的代码:

try
{
strQry = @"Update UserMaster set Password=@Pwd, RoleID=@RoleID where UserID=@UserID";
cmd.Parameters.AddWithValue("@Pwd", strUserPwd);
cmd.Parameters.AddWithValue("@RoleID", intRoleID);
cmd.Parameters.AddWithValue("@UserID", intUserID);
cmd.Connection = con;
cmd.CommandText = strQry;
con.Open();
intReturn = cmd.ExecuteNonQuery();
con.Close();
}
catch(Exception ex)
{
    throw new Exception(ex.Message);
}

据我所知,我可以看到更新查询没有问题,因为我已经使用这种方法很长时间了,但是,我收到 @987654322 真的很奇怪@异常。

谁能帮帮我

【问题讨论】:

  • 我知道我传递更新参数的方式适用于 MS Sql,但它也适用于 MS Access,直到您保持参数顺序正确。

标签: c# asp.net sql ms-access sql-update


【解决方案1】:

其实password是保留字,需要用括号括起来[]
所以你的查询会变成

strQry = @"Update UserMaster set [Password]=@Pwd, RoleID=@RoleID where UserID=@UserID";

如果正确则全部休息:)

参考list of reserve keywords in MS Access 2007 Database

提示:始终建议使用non-reserved 关键字,即使您这样做,也始终包含[ ] 以更安全。匆忙中你没有意识到你搞砸了哪个保留关键字

【讨论】:

  • 谢谢朋友,虽然我知道这一点,但我真的没有想到。你真的很有帮助。
【解决方案2】:

我认为您正在使用 OleDb 连接到 MsAccess。

尝试像这样将参数声明从 @parameter 更改为 ?

更多:OleDbParameter Class

try
{
  strQry = @"Update UserMaster set Password=?, RoleID=? where UserID=?";
  var p1 = command.CreateParameter();
  p1.Value = strUserPwd;
  command.Parameters.Add(p1);

  var p2 = command.CreateParameter();
  p2.Value = intRoleID;
  command.Parameters.Add(p2);

  var p3 = command.CreateParameter();
  p3.Value = intUserID;
  command.Parameters.Add(p3);

  cmd.Connection = con;
  cmd.CommandText = strQry;
  con.Open();
  intReturn = cmd.ExecuteNonQuery();
  con.Close();
}
catch(Exception ex)
{
    throw new Exception(ex.Message);
}

【讨论】:

  • 可能是因为你给出的答案是错误的。正确答案是password是保留字。
猜你喜欢
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 2022-12-30
  • 1970-01-01
  • 2020-02-21
  • 2014-03-15
相关资源
最近更新 更多