You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#操作Access数据库更新密码时出现UPDATE语句语法错误如何解决

C# Access数据库UPDATE语法错误修复方案

核心错误点

你混淆了UPDATE和INSERT INTO的SQL语法,同时存在多个需要修复的逻辑/安全问题:

  • UPDATE语句的正确格式为UPDATE 表名 SET 字段名 = 新值 WHERE 过滤条件,你写的UPDATE into ... values(...)是INSERT语句的写法,属于基础语法错误
  • Access数据库中password是系统保留关键字,作为字段名使用时必须用[]包裹转义
  • 直接拼接用户输入的TextBox1.Text到SQL语句中存在SQL注入高危漏洞,必须使用参数化查询
  • WHERE子句中声明了@id参数,但代码中没有给该参数赋值,执行会报错
  • 数据库连接、命令对象未做自动释放处理,异常场景下会出现资源泄漏
  • 原代码的Response.Write直接输出alert文本不会触发前端弹窗,需要包裹<script>标签

修正后完整代码

protected void Button1_Click(object sender, EventArgs e)
{
    // 这里需要替换为你实际业务中获取当前操作用户ID的逻辑,示例为读取Session存储的用户ID
    int currentUserId = Convert.ToInt32(Session["LoginUserId"]);
    string newPassword = TextBox1.Text.Trim();
    
    // using语法会在代码块结束后自动释放对象资源,无需手动调用Close
    using (OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("~/Database/registration.accdb")))
    {
        con.Open();
        using (OleDbCommand cmd = new OleDbCommand())
        {
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;
            // 修正后的SQL语句,保留字段加[]转义,全参数化避免注入
            cmd.CommandText = "UPDATE userdata SET [password] = @newPwd WHERE id = @userId";
            // OleDb参数需按照SQL语句中声明的顺序赋值
            cmd.Parameters.AddWithValue("@newPwd", newPassword);
            cmd.Parameters.AddWithValue("@userId", currentUserId);
            
            cmd.ExecuteNonQuery();
        }
    }
    Response.Write("<script>alert('Password Reset Successfully done');</script>"); 
}

内容的提问来源于stack exchange,提问作者Kaise karen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 16:57:01