2012-04-09 26 views
2

我對ADOX Interop有一個非常奇怪的問題。無法使用ADOX創建Access數據庫

我有這樣的代碼:

 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

服務器操作系統是Windows 2008 32位。我認爲是一個服務器配置問題,但你能給我一些啓示嗎?我不知道還有什麼我可以做...

+0

您的目標服務器是x64機器嗎?您是否針對您的AnyCPU應用程序? – Steve 2012-04-09 20:39:22

+0

我針對AnyCPU – 2012-04-09 22:00:02

+0

這兩臺計算機中的ADOX版本是否相同? – Steve 2012-04-09 22:22:10

回答

3

如果您部署64位的機器。如果是這樣的話,那麼你的代碼無法通過JET.OleDB.4.0
使用ADOX應用,一個快速的解決方案可能是將您的目標架構改爲x86。

否則,您可以嘗試在目標機器上下載並安裝Microsoft Access Database Engine驅動程序的64位版本,但我不知道它們是否支持ADOX。您還需要更改連接字符串

+0

服務器操作系統是Windows 2008 32位 – 2012-04-09 22:16:12

+0

這不可能是正確的答案,我已閱讀[本文後]刪除,然後取消刪除(http://meta.stackexchange.com/questions/37738/when-or-should - 您刪除您的不正確答案)在META SO上。 – Steve 2012-04-10 09:05:31

+0

你救了我一天 – 2017-03-20 15:18:00

1

查看您是否可以在您的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 
+0

謝謝你。我有機會的時候會試試這個。奇怪的是今天早上一切正常,沒有改變任何東西...... – 2012-04-10 11:38:38