在 Access 数据库中更新密码时 UPDATE 语句中的语法错误

Posted

技术标签:

【中文标题】在 Access 数据库中更新密码时 UPDATE 语句中的语法错误【英文标题】:Syntax error in UPDATE statement while updating password in Access database 【发布时间】:2021-07-18 13:02:48 【问题描述】:

我在 UPDATE 语句中遇到语法错误,同时在 C# 中更新 Access 数据库中的密码:

protected void Button1_Click(object sender, EventArgs e)

    OleDbConnection con = new OleDbConnection();
    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
        Server.MapPath("~/Database/registration.accdb");

    con.Open();

    OleDbCommand cmd = new OleDbCommand();
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText =
        "UPDATE into userdata(password)values('"+TextBox1.Text+"') where id=@id";
    cmd.ExecuteNonQuery();
    con.Close();
    Response.Write("alert('Password Reset Successfully done');"); 

【问题讨论】:

那么,您的问题到底是什么? 语法错误在哪里? 你需要了解UPDATE SQL语句的语法...UPDATE INTO是不正确的语法 而且,将密码存储在数据库中是完全不行的。永远不要存储未经哈希处理的密码(甚至未加密)。 请使用参数化查询 - 通过连接等方式构建 SQL 查询是灾难的根源。它不仅是许多难以调试的语法错误的来源,而且还是 SQL Injection attacks 的大门。 【参考方案1】:

这是因为您的SQL Query 不正确,这不是您更新数据库中数据的方式。应该是这样的:

query = "Update [tableName] SET [ColumnName] = 'Values', [ColumnName1] = 'Values2',...";

您至少应该学习 SQL 语法的基础知识,更多信息here

另外,你不应该连接你的查询,因为它会变得容易受到SQL Injection attack的攻击,你至少应该使用Parameterized Query

OleDbConnection con = new OleDbConnection();
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
    Server.MapPath("~/Database/registration.accdb");

con.Open();

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText =
    "UPDATE yourTableName SET [yourColumnName] = @YourFirstValue, [secondColumnName] = @YourSecondValue WHERE [columnKey] = @ID"

cmd.Parameters.AddWithValue("@YourFirstValues", textbox1.Text);
cmd.Parameters.AddWithValue("@YourSecondValue ", textbox2.Text);
cmd.Parameters.AddWithValue("@ID", textbox3.Text);

cmd.ExecuteNonQuery();
con.Close();
Response.Write("alert('Password Reset Successfully done');"); 

【讨论】:

@user9938 文本框的值不能为null。尽管您有断言,但 empty 的值可以正常工作。【参考方案2】:

你必须修正你的查询

   "UPDATE  userdata SET password=@password where id=@id";
 

并在 cmd.ExecuteNonQuery() 之前添加新行

cmd.Parameters.AddWithValue("@id", id);
 cmd.Parameters.AddWithValue("@password", TextBox1.Text);

【讨论】:

可能会起作用,但是:从不将密码存储在数据库中。请改用加盐哈希。

以上是关于在 Access 数据库中更新密码时 UPDATE 语句中的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

Access中UPDATE语句一次更新多个数据

Access中UPDATE语句一次要更新多个数据

Access 中 SQL 链接表上的 UPDATE 查询的“操作必须使用可更新查询”

Access 2016 更新查询

如何使用 DataAdapter.Update 方法同时更新 Access 数据库和 .NET DataSet 对象?

查询中的Access UPDATE语句无法实际更新