我在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);
}
据我所知,我能看到的是更新查询没有问题,因为我很长一段时间都在使用这种方法,但是,我得到一个{{ 1}}例外。
任何人都可以帮助我
答案 0 :(得分:2)
实际上password
是保留字,您需要将其括在括号[]
中
所以你的查询将成为
strQry = @"Update UserMaster set [Password]=@Pwd, RoleID=@RoleID where UserID=@UserID";
如果正确的话,请休息:)
参考list of reserve keywords in MS Access 2007 Database
提示:始终建议使用non-reserved
关键字,即使您这样做,也要始终包含[ ]
以保证更安全。因为匆忙你没有意识到你搞砸了哪个保留关键词
答案 1 :(得分:-1)
我认为您正在使用OleDb
连接到Ms Access。尝试将参数声明从@parameter
更改为此?
。
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);
}