我的问题如下:Writing large number of records (bulk insert) to Access in .NET/C#
我试过用DAO指示的方法。起初,它不起作用,出现此错误:)Retrieving the COM class factory for component with CLSID {681EF637-F129-4AE9-94BB-618937E3F6B6} failed due to the following error: 80040154.
我已经搜索并找到了带有注册表项的解决方案,它可以工作,但是当我在另一台 PC 上尝试时,该功能使我的应用程序崩溃。
有我的代码和它失败的地方:
using Microsoft.Office.Interop.Access.Dao;
public void ExportDataTableToAccess(System.Data.DataTable dtOutData)
{
Microsoft.Office.Interop.Access.Application access = new Microsoft.Office.Interop.Access.Application();
_DBEngine dbEngine = null;
try
{
dbEngine = access.DBEngine; //Fails here
//I have tried DBEngine dbEngine = access.DBEngine
//did not work either
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
try
{
Boolean CheckFl = false;
string DBPath = dbPath;
Database db = dbEngine.OpenDatabase(dbPath);
Recordset AccesssRecordset = db.OpenRecordset(dtOutData.TableName);
Field[] AccesssFields = new Field[dtOutData.Columns.Count];
//Loop on each row of dtOutData
for (Int32 rowCounter = 0; rowCounter < dtOutData.Rows.Count; rowCounter++)
{
AccesssRecordset.AddNew();
//Loop on column
for (Int32 colCounter = 0; colCounter < dtOutData.Columns.Count; colCounter++)
{
// for the first time... setup the field name.
if (!CheckFl)
AccesssFields[colCounter] = AccesssRecordset.Fields[dtOutData.Columns[colCounter].ColumnName];
AccesssFields[colCounter].Value = dtOutData.Rows[rowCounter][colCounter];
}
AccesssRecordset.Update();
CheckFl = true;
}
AccesssRecordset.Close();
db.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(dbEngine);
}
}
我也尝试过这个解决方案:如何修复 COMException 错误 80040154?
它仍然可以在我的计算机上运行,但在其他计算机上无效。而且我不知道如何对每台计算机上的注册表进行所有操作以使其正常工作(我也不想要这个解决方案,因为这将花费大量时间)
我知道这是某个地方的 32-64 位问题,但是如果 x86 构建在其他计算机上不起作用……我应该如何解决这个问题?
这是我在这个网站上的第二个问题,如果我的问题有问题,请告诉我,我会尽一切可能纠正它:)