2012-04-09 27 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