私の質問は次のとおりです: Write 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 ビルドが他のコンピューターで動作しない場合... この問題を解決するにはどうすればよいですか?
これは、このサイトでの 2 番目の質問です。私の質問に何か問題がある場合は、教えてください。修正するために可能な限りのことをします :)