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

如何在C#中用OleDb向含自动编号字段的Access数据库插入记录

解决Savegame表插入时SaveID字段NOT NULL错误的方案

嘿,我来帮你搞定这个问题!你遇到的SaveID不能为空的提示,大概率是自动编号字段的配置或者SQL写法的问题,下面给你一步步排查和解决的办法:

1. 先确认SaveID字段的自动编号配置是否正确

你说SaveID是自动编号,但数据库可能没真正把它设成自动生成值的类型:

  • 如果是Access数据库:打开表设计,确保SaveID的字段类型选择的是「自动编号」,并且建议把它设为主键(自动编号字段通常默认是主键)。
  • 如果是SQL Server:要确保SaveID的类型是INT,并且设置了IDENTITY(1,1)(意思是从1开始,每次递增1)。
  • 如果是MySQL:SaveID的类型设为INT,加上AUTO_INCREMENT属性,同时设为主键。

如果这个配置没做好,数据库不会自动给SaveID生成值,自然会提示NOT NULL错误。

2. 改用参数化查询,同时避免SQL注入风险

你当前的SQL语句用字符串拼接的方式,不仅有严重的SQL注入漏洞,还可能因为特殊字符(比如用户名里有单引号)导致语法错误。换成参数化查询既能解决潜在的语法问题,又更安全:

举个C#的例子(假设你用的是ADO.NET):

cmd.CommandText = "INSERT INTO Savegame(Username, GameTitle, Savestate) VALUES(@Username, @GameTitle, @Savestate)";
// 添加参数,避免字符串拼接的问题
cmd.Parameters.AddWithValue("@Username", username);
cmd.Parameters.AddWithValue("@GameTitle", game);
cmd.Parameters.AddWithValue("@Savestate", 1);

参数化查询会让数据库自动处理字段值的格式,也能确保自动编号字段正常生成值。

3. 额外检查点

  • 确认你的数据库连接字符串没有特殊配置导致自动编号失效(比如有些旧版Access驱动可能需要特定设置)。
  • 查看表的约束,确保SaveID除了NOT NULL外,没有其他奇怪的约束阻止自动生成值。

按照上面的步骤排查,应该就能解决你遇到的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:14:43