OleDb ExecuteNonQuery无法向Access数据库插入全部数据
问题解决:Access INSERT语句语法错误(含Image等字段时)
核心原因
Access数据库中,Image是保留关键字,直接作为字段名使用会触发语法解析错误,这就是添加Image字段后报错的根本原因。
修复方案
将INSERT语句中的保留字字段名用方括号[]包裹,避免与数据库关键字冲突。修改后的完整代码如下:
string insertStatement = "INSERT INTO Car (Category, Model, CarYear, Mileage, CostPerDay, Availability, Location, [Image], Manufacturer, Description) " + "VALUES (@Category, @Model, @CarYear, @Mileage, @CostPerDay, @Availability, @Location, @Image, @Manufacturer, @Description)"; OleDbConnection connection = new OleDbConnection(CarRentalDB.ConnectionString); OleDbCommand command = new OleDbCommand(insertStatement, connection); // 注意:OleDb参数按顺序匹配而非名称匹配,需保证参数添加顺序与VALUES中的顺序完全一致 command.Parameters.AddWithValue("@Category", car.category.ToString()); command.Parameters.AddWithValue("@Model", car.model); command.Parameters.AddWithValue("@CarYear", car.year); command.Parameters.AddWithValue("@Mileage", car.mileage); command.Parameters.AddWithValue("@CostPerDay", car.costPerDay); command.Parameters.AddWithValue("@Availability", car.availability); command.Parameters.AddWithValue("@Location", car.location); command.Parameters.AddWithValue("@Image", car.image); command.Parameters.AddWithValue("@Manufacturer", car.manufacturer); command.Parameters.AddWithValue("@Description", car.description); using (connection) { connection.Open(); command.ExecuteNonQuery(); }
额外注意事项
- OleDb参数特性:OleDb不支持真正的命名参数,参数是按添加顺序与VALUES中的占位符顺序匹配的,务必保证两者顺序一致。
- 保留字排查:若后续仍有类似问题,可检查字段名是否属于Access保留关键字(如
Password、Date等),均可用方括号包裹解决。 - 资源释放:使用
using语句自动释放数据库连接资源,避免连接泄漏。 - 冗余代码清理:你提供的第二个示例代码中重复添加了
@Category和@Model参数,虽不影响执行,但属于冗余代码,建议删除。
内容的提问来源于stack exchange,提问作者los
相关产品推荐
相关产品推荐

