0

私の質問は次のとおりです: 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 番目の質問です。私の質問に何か問題がある場合は、教えてください。修正するために可能な限りのことをします :)

4

1 に答える 1

1

PIA Primary Interop Assemblies をインストールして、DAO ドライバーが見つからない場合に使用します。

于 2020-12-28T03:45:09.493 に答える