C# 从多个文件快速插入原始二进制数据以访问数据库
我正在寻找从多个二进制文件读取并在多个表中的单个MS Access数据库中写入所有内容的最快方法。SQL Server或任何其他数据库都不是选项。我用的是C 假设我只有一个包含1GB数据的文件C# 从多个文件快速插入原始二进制数据以访问数据库,c#,sql,database,ms-access,ado.net,C#,Sql,Database,Ms Access,Ado.net,我正在寻找从多个二进制文件读取并在多个表中的单个MS Access数据库中写入所有内容的最快方法。SQL Server或任何其他数据库都不是选项。我用的是C 假设我只有一个包含1GB数据的文件 文件以标题(包含列名代码)开头,后跟700000多个测量数据块。标头长度小于100字节。一个数据块的长度为1500字节(372 x单浮点+12字节表示日期和时间) 必须在第一个数据库表中插入前84个单个值 其余288个单一值在9个表中平均分配,每个表32个值 每个表行都有时间和日期作为第一列 现在,我使用
有什么方法可以更快地完成这项工作吗?您认为可以期待什么?您可能正在提交每一次插入。最好开始一个事务,处理一些固定数量的数据块,比如100或500,然后提交事务并开始另一个事务。保留已提交记录的文本文件日志,以便在出于某种原因需要重新启动时知道从何处开始 您可以尝试更改Jet引擎属性以进行同步,但最好是在连接上简单地开始一个SQL事务,然后在大量记录之后提交。您还需要像中一样打开自动提交
此外,如果指定了排序键,则撤消该操作。加载所有数据后,使用ADOX使它们成为索引键。您应该使用
SqlBulkCopy
类
看 谢谢你的重播,但我也没有找到StartTrans。我已经读取了所有数据并将其写入DataTable中。现在,我已经准备好将大型数据表插入mdb文件中。我发现很少有线程建议使用od Microsoft DAO 3.6对象库或其他COM。您可以始终在SQL语句中执行事务,如这里所示,我刚刚尝试使用ADODB插入。我的执行时间提高了2倍,但还是太慢了。我试过使用BeginTrans/CommitTrans,但似乎没有效果。在BeginTrans之后,我将为DataTable中的每一行执行Insert语句。Execute方法花费了我声明的BeginTrans的很长时间(90%的处理时间)。提交在100毫秒内执行,因此没有启动新事务的必要。引用的URL中关于更改注册表设置的建议是非常糟糕的建议。这些设置(隐式CommitSync和UserCommitSync)不能设置为相反的设置,因为它们适用于不同的事物。有关这些设置应用于什么的完整说明,请参阅本文:我必须将数据写入Access数据库。SqlBulkCopy类只能用于将数据写入SQL Server表。