2012-04-09 9 views
2

私はADOX Interopに本当に奇妙な問題があります。ADOXでアクセスデータベースを作成できません

 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はWindows 2008 32ビットです。私はサーバー構成の問題だと思いますが、私に光をあげてもらえますか?私は他に何ができるのかわかりません...

+0

ターゲットサーバーはx64マシンですか? AnyCPU用のアプリケーションをターゲットにしていますか? – Steve

+0

私はAnyCPUをターゲットにしています –

+0

両方のコンピュータで同じバージョンのADOXを使用していますか? – Steve

答えて

3

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

そうでなければ、Microsoft Access Database Engineドライバの64ビットバージョンをターゲットマシンにダウンロードしてインストールすることができますが、それらがADOXをサポートしているかどうかはわかりません。また、接続文字列を変更する必要があります

+0

サーバーOSはWindows 2008 32ビットです –

+0

これは正解ではありませんでした。[この投稿を読んだ後で削除しました](http://meta.stackexchange.com/questions/37738/when-or-shouldあなたの誤った答えを削除してください)。 – Steve

+0

あなたは私の一日を保存しました –

1

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

これは私の32ビットWindows 7で動作します.64ビットWindows 7では、「Class not registered」というエラーで失敗します。あなたのサーバーは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 
+0

ありがとうございました。私はチャンスがあるときにこれを試してみる。不思議なことに今朝は何も変わることなくすべてがうまくいく... –

関連する問題