更新行会产生错误操作必须使用可更新的查询

时间:2011-07-21 13:14:15

标签: asp.net ms-access

我在尝试更新记录时收到此错误:

  

错误[HY000] [Microsoft] [ODBC Microsoft Access驱动程序]

     

操作必须使用可更新的查询

但是当我添加新记录时,它会添加得很好。

我做了一些搜索,发现问题是因为ASP.NET辅助进程没有更新数据库的权限。但是我如何能够插入新记录(不插入更新数据库!)但不更新(将记录设置为不同的值)。

OdbcConnection DbConnection = new OdbcConnection("DSN=inv");
DbConnection.Open();

try
{
    string newPassword = password1.Text;
    OdbcCommand DbCommand = new OdbcCommand("UPDATE Users" + " SET [Password] = '" + newPassword + "'" + " Where Name = '" + Session["LoginId"] + "'" + ";", DbConnection);
    DbCommand.ExecuteNonQuery();
    Server.Transfer("Default.aspx", true);
}

1 个答案:

答案 0 :(得分:4)

如果您没有在该表上声明主键,则通常会收到该错误。

您的代码也非常丑陋,至少您应该使用参数化查询:

OdbcCommand DbCommand = new OdbcCommand("UPDATE Users SET [Password] = @Password Where Name = @Name", DbConnection);
var param = DbCommand.Parameters.Add("@Password", OdbcType.Text);
param.Value = passWord;
param = DbCommand.Parameters.Add("@Name", OdbcType.Text);
param.Value = Session["LoginId"];

我希望这不仅仅是一个玩具/演示应用程序 - 明确存储密码是不好的。以明文形式存储访问密码是一个双坏的。