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

在MS Access表新增AutoNumber类型id列后插入数据报错如何解决

问题解决方法

报错核心原因

  • 新增AutoNumber类型的id列后,你使用的隐式字段INSERT语法INSERT INTO 表名 VALUES(值列表)要求值的数量、顺序和表当前所有字段完全匹配。AutoNumber是自增类型,不需要手动赋值,你没有显式指定插入字段,数据库会默认把你传的第一个字符串值匹配到数值型的id列,直接触发数据类型不匹配错误。
  • 所有插入值都用单引号包裹,若表中存在数字、日期类型的非文本字段,也会触发类型不匹配错误,同时字符串拼接的写法存在SQL注入风险。
  • 数据库连接未做资源释放管理,容易出现连接泄露问题。

修复步骤

  1. 修改INSERT语句,显式指定要插入的字段列表,排除自增的id字段,字段名替换为你prod表中除id外的实际字段名即可。
  2. 替换字符串拼接为参数化查询,自动匹配数据类型,避免注入风险和手动处理引号的问题。
  3. 用using语句管理数据库连接、命令对象的生命周期,自动释放资源无需手动调用Close方法。

修复后的代码示例:

private void button1_Click_1(object sender, EventArgs e)
{
    // 括号内替换为你prod表除id外的实际字段名,顺序和下方参数赋值顺序完全对应即可
    string insertSql = "insert into prod (字段1,字段2,字段3,字段4,字段5,字段6,字段7,字段8,字段9,字段10,字段11,字段12,字段13) values (@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13)";
    using (OleDbConnection sc = new OleDbConnection(connectionString))
    {
        using (OleDbCommand sm = new OleDbCommand(insertSql, sc))
        {
            // OleDb仅按参数顺序匹配,和参数名无关,顺序要和上方字段顺序完全一致
            sm.Parameters.AddWithValue("@p1", textBox13.Text);
            sm.Parameters.AddWithValue("@p2", textBox1.Text);
            sm.Parameters.AddWithValue("@p3", textBox2.Text);
            sm.Parameters.AddWithValue("@p4", textBox3.Text);
            sm.Parameters.AddWithValue("@p5", textBox4.Text);
            sm.Parameters.AddWithValue("@p6", textBox5.Text);
            sm.Parameters.AddWithValue("@p7", textBox6.Text);
            sm.Parameters.AddWithValue("@p8", textBox7.Text);
            sm.Parameters.AddWithValue("@p9", textBox8.Text);
            sm.Parameters.AddWithValue("@p10", textBox9.Text);
            sm.Parameters.AddWithValue("@p11", textBox10.Text);
            sm.Parameters.AddWithValue("@p12", textBox11.Text);
            sm.Parameters.AddWithValue("@p13", textBox12.Text);
            
            // 若表中存在非文本类型字段,提前做类型转换即可,示例:
            // sm.Parameters.AddWithValue("@pX", Convert.ToInt32(textBoxX.Text)); // 数字类型
            // sm.Parameters.AddWithValue("@pY", Convert.ToDateTime(textBoxY.Text)); // 日期类型
            
            sc.Open();
            sm.ExecuteNonQuery();
        }
    }
}

如果修改后仍有报错,优先核对字段顺序和参数赋值顺序是否完全匹配,再核对每个字段的类型和传入值类型是否一致即可解决。

内容的提问来源于stack exchange,提问作者Abdul Haq Asif

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:54:04