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

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();
}

额外注意事项

  1. OleDb参数特性:OleDb不支持真正的命名参数,参数是按添加顺序与VALUES中的占位符顺序匹配的,务必保证两者顺序一致。
  2. 保留字排查:若后续仍有类似问题,可检查字段名是否属于Access保留关键字(如Password、Date等),均可用方括号包裹解决。
  3. 资源释放:使用using语句自动释放数据库连接资源,避免连接泄漏。
  4. 冗余代码清理:你提供的第二个示例代码中重复添加了@Category和@Model参数,虽不影响执行,但属于冗余代码,建议删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:30:21