首页 > 解决方案 > OleDB 不保存对大型 xlsx 文件的更改

问题描述

我正在使用 OleDB 对一个大的 xlsx 文件(大约 170k 行)执行大量插入。出于某种原因,每次查询后文件都没有改变,所以我一次将操作分成大约 1700 次插入的块,因此现在需要 100 次操作才能完成该过程。

每次批量插入后,我都会关闭连接并再次打开它以提交更改。但是,在第 28 次批量插入之后,OleDB 停止提交更改。内存中的操作存在(如果我查询应该插入多少行与实际插入了多少行,一切似乎都很好);但是,一旦连接关闭,文件实际上并没有更新,并且过程会静默失败 - 不会引发任何错误。我找不到很多关于这种行为的文档,有没有人遇到过类似的错误?

必须使用 OleDB 和大 xlsx 文件;我知道这很糟糕,但这不是我的选择,我对此无能为力。感谢大家可能提供的任何帮助。

现在的代码

moConnection = New OLEDBConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""C:\something\something.xlsx"";Extended Properties=""Excel 12.0 Xml;HDR=YES""")
moConnection.Open();
Dim oCommand As New OleDbCommand("INSERT INTO [table$] SELECT * FROM [anotherTable$] WHERE [stato] LIKE '%INVIATO%'", moConnection)
oCommand.ExecuteNonQuery()
moConnection.Close()
moConnection.Dispose()

将批量插入拆分为更小的块是通过 id 上的附加 WHERE 子句来实现的,以仅获取内容的子集。

标签: vb.netoledbrpa

解决方案


推荐阅读