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

使用DataAdapter和SQLiteCommandBuilder无法将DataTable写入SQLite表

问题排查与解决

核心问题1:DataTable行状态未标记为待插入

ExcelDataReader生成的DataTable中,所有行的默认状态是Unchanged,而SQLiteDataAdapter.Update()仅处理状态为Added/Modified/Deleted的行,这是数据不写入数据库的最直接原因。

解决方法:遍历DataTable的所有行,将行状态设置为Added:

dt = result.Tables[0];
// 标记所有行为待插入状态
foreach (DataRow row in dt.Rows)
{
    row.SetAdded();
}

核心问题2:事务未与DataAdapter关联

代码中创建的事务未绑定到SQLiteDataAdapter的命令对象,导致Adapter的更新操作不在事务范围内,最终提交事务时无有效操作。

修正方法:从当前打开的Connection创建事务,并将事务赋值给Adapter的相关命令:

SQLiteTransaction trans = Con.BeginTransaction();
// 将事务绑定到Adapter的查询命令
adapter2.SelectCommand.Transaction = trans;
// 同时绑定CommandBuilder生成的插入命令
SQLBuilder2.GetInsertCommand().Transaction = trans;

adapter2.Update(dt);
trans.Commit();

额外检查项

  • 数据库表主键设置:如果目标表TableDB没有主键,SQLiteCommandBuilder可能无法正确生成插入命令,确保表有主键字段(即使是自增ID)。
  • 列名完全匹配:确认Excel读取后的DataTable列名与数据库表TableDB的列名完全一致(避免大小写或命名差异导致匹配失败)。
  • 资源正确释放:使用using语句管理文件流、数据库连接等资源,避免资源泄漏:
using (SQLiteConnection Con = new SQLiteConnection(DataSource))
using (FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read))
{
    Con.Open();
    var reader = ExcelReaderFactory.CreateReader(stream);
    // ... 后续读取和更新逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:58:19