Windows C#向MS Access插入数据时Insert语句语法错误求助
MS Access 插入数据报错的问题解决
问题分析与修复点:
- 字段名与保留字语法错误:SQL里
Employee ID含空格、Password是Access保留字,必须用方括号[]包裹,否则数据库无法识别字段。 - 字符串拼接的致命问题:直接拼接文本框内容,不仅会被SQL注入攻击,一旦输入含单引号(比如名字
O'Neil)就会触发SQL语法错误,必须改用参数化查询。 - 连接资源泄漏:原代码手动关闭连接,若报错时可能没执行到
Close(),用using语句可自动释放连接资源,避免连接池耗尽。
修正后的代码:
private void btn_add_Click(object sender, EventArgs e) { try { // 修正字段名,用方括号包裹特殊字段 string sql = "INSERT INTO Employee([Employee ID], Firstname, Lastname, Email, Username, [Password]) " + "VALUES(@EmpID, @FirstName, @LastName, @Email, @Username, @Password)"; // using语句自动管理连接和命令的生命周期 using (OleDbConnection conn = new OleDbConnection("你的Access连接字符串")) using (OleDbCommand cmd = new OleDbCommand(sql, conn)) { // 添加参数,注意OleDb是按参数顺序匹配,不是名称 cmd.Parameters.AddWithValue("@EmpID", txt_employee_id.Text); cmd.Parameters.AddWithValue("@FirstName", txt_employee_firstname.Text); cmd.Parameters.AddWithValue("@LastName", txt_employee_lastname.Text); cmd.Parameters.AddWithValue("@Email", txt_employee_email.Text); cmd.Parameters.AddWithValue("@Username", txt_employee_username.Text); cmd.Parameters.AddWithValue("@Password", txt_employee_password.Text); conn.Open(); cmd.ExecuteNonQuery(); MessageBox.Show("记录已保存", "操作成功", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (Exception ex) { MessageBox.Show($"错误详情:{ex.Message}", "操作失败", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
额外注意:
- 把代码里的
"你的Access连接字符串"替换成你实际使用的连接字符串(比如Provider=Microsoft.ACE.OLEDB.12.0;Data Source=你的数据库路径.accdb;)。 - OleDb参数不支持按名称匹配,必须保证添加参数的顺序和SQL语句中
VALUES后的顺序完全一致。
内容的提问来源于stack exchange,提问作者XDponce
相关产品推荐
相关产品推荐

