无法使用 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位。 我认为是服务器配置问题,但你能给我一些说明吗?我不知道我还能做什么...

无法使用 ADOX 创建访问数据库

如果在 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