2

ADOXInteropに本当に奇妙な問題があります。

私はこのコードを持っています:

        try
        {
            if (File.Exists(path))
                File.Delete(path);

            var cat = new CatalogClass();
            cat.Create("Provider=Microsoft.Jet.OLEDB.4.0; Data Source = d:\\Test.mdb; Jet OLEDB:Engine Type=5");

            Marshal.ReleaseComObject(cat);
            cat = null;
            GC.Collect();
        }
        catch (FileNotFoundException e)
        {
            throw new FileNotFoundException("El archivo no se encuentra", e);
        }
        catch (COMException e)
        {
            throw new COMException(connStr + e.Message);
        }
        catch (Exception e)
        {
            throw new Exception(connStr, e);
        }

cat.Create()行でコードが失敗しています。本当に奇妙なのは、私のローカル開発者のマシンでは正常に動作するが、本番サーバーでは動作しないことです...問題の行の前にランダムなファイルを生成しようとして動作したため、書き込み権限の問題ではありません完璧に。COMExceptionメッセージは「指定されていないエラー」のみですHResult:-2147467259

サーバーOSはWindows200832ビットです。サーバー構成の問題だと思いますが、少し教えていただけますか?他に何ができるかわかりません...

4

2 に答える 2

3

アプリケーションを 64 ビット マシンに展開する場合、コードは JET.OleDB.4.0 経由で ADOX を使用できません。
この場合、迅速な解決策は、ターゲット アーキテクチャを x86 に変更することです。

それ以外の場合は、ターゲット マシンに 64 ビット バージョンのMicrosoft Access データベース エンジンドライバーをダウンロードしてインストールすることもできますが、それらが ADO​​X をサポートしているかどうかはわかりません。接続文字列も変更する必要があります

于 2012-04-09T22:10:53.323 に答える
2

C# コードの外部で ADOX カタログを使用できるかどうかを確認します。Access がインストールされている場合は、Steve が提案したように Access VBA を試してください。Office がインストールされていない場合は、VBScript を試してください。

これは私の 32 ビット Windows 7 で動作します。64 ビット Windows 7 では、「クラスが登録されていません」というエラーで失敗します。サーバーが32ビットであると言ったので(その後削除された回答への返信で)、それはあなたの状況ではないことに気づきました。ただし、スクリプトが成功するか、C# のエラー状態から得られるよりも詳細なエラー メッセージが表示されることを願っています。

'Const cPath = "C:\Users\hans\Documents\Test.mdb"
Const cPath = "d:\Test.mdb"
Dim objCat
Dim strConnect
strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & cPath & ";Jet OLEDB:Engine Type=5"
WScript.Echo strConnect

Set objCat = CreateObject("ADOX.Catalog")
objCat.Create strConnect
Set objCat = Nothing

そのファイルに名前を付けて、コマンド プロンプト ウィンドウからAdoxCreateDb.vbs実行しました。cscript

cscript AdoxCreateDb.vbs
于 2012-04-10T00:09:54.977 に答える