无法使用 ADOX 创建访问数据库
本文关键字:创建 访问 数据库 ADOX | 更新日期: 2023-09-27 18:30:44
我对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);
}
代码在猫中失败。创建() 行。真正奇怪的是,在我的本地开发人员机器上它工作正常,但在生产服务器中却没有......这不是写入权限问题,因为我尝试在问题行之前生成一个随机文件并且工作得很好。COMException 消息仅为"未指定错误"HResult: -2147467259
服务器操作系统是Windows 2008 32位。 我认为是服务器配置问题,但你能给我一些说明吗?我不知道我还能做什么...
如果在 64 位计算机上部署应用程序,则代码无法通过 JET 使用 ADOX。OleDB.4.0
如果是这种情况,那么,一个快速的解决方案可能是将目标架构更改为 x86。
否则,您可以尝试在目标计算机上下载并安装 64 位版本的 Microsoft Access 数据库引擎驱动程序,但我不知道它们是否支持 ADOX。还需要更改连接字符串
查看是否可以在 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