【问题标题】:Connect ODBC without driver installed在未安装驱动程序的情况下连接 ODBC
【发布时间】:2019-03-06 22:08:46
【问题描述】:

是否可以在不安装系统范围驱动程序的情况下进行 ODBC 连接?我可以只指向一个包含驱动程序的 DLL 吗?

我在 C++ 中使用它,32 位,目前在 Windows 上进行测试,并连接到 Firebird 数据库。我尝试了以下连接字符串,不起作用

constexpr auto DatabaseConnection =
//"DRIVER=Firebird/InterBase(r) driver;" //this works when driver installed
"UID=SYSDBA;"
"PWD=masterkey;"
"DBNAME=C:\\some\\path\\to\\database\\DB.FDB;"
"Client=C:\\Windows\\System32\\OdbcFb.dll;";

错误信息:[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

【问题讨论】:

    标签: c++ database odbc database-connection


    【解决方案1】:

    是的,可以通过完全指定连接字符串与未注册的 ODBC 驱动程序建立无 DSN 连接。

    此行,当驱动安装正确时使用--

    "DRIVER=Firebird/InterBase(r) driver;"
    

    -- 应该是这个,按名字引用驱动--

    "DRIVER={Firebird/InterBase(r) driver};"
    

    -- 应该改成这个--

    "DRIVER=C:\\Windows\\System32\\OdbcFb.dll;"
    

    看来如果%PATH% 设置不正确(包括包含odbcfb.dll 的目录)和/或如果FB 驱动程序未在MDAC 驱动程序管理器中注册,则必须包括FB 特定的@ 987654329@ 关键字指向odbcfb.dll,在这种情况下,您不需要对odbcfb.lib 的任何引用。

    您可能会受益于阅读驱动程序自己的 creating DSNsDNSless connections 文档...

    【讨论】:

    • Driver中设置路径不起作用。显示相同的错误。我在某处读到指定驱动程序路径在 Windows 上不起作用。
    • @jaskmar - 我刚刚发布了另一个问题的答案,得出了错误的结论。 (简单地说,Driver=C:/path/to/driver/library 在 Windows 上运行良好。)
    • 我不知道它是否特定于 Firebird,但是如果不链接 OdbcFb.lib,则提供路径将不起作用。
    【解决方案2】:

    Firebird ODBC 驱动程序包含应在应用程序中链接的小型静态库(名为 OdbcFb.lib)。在引擎盖下,它可能会预加载 dll 并以某种方式将其注册为新驱动程序。 链接此类库时,有效的连接字符串是:

    "DRIVER=OdbcFb.dll;UID=SYSDBA;PWD=masterkey;DBNAME=127.0.0.1:C:\\path\\DB.GDB;";
    

    令我惊讶的是,当您省略 DRIVER 时,它也可以工作,通过使用一些魔法来选择合适的驱动程序:

    "UID=SYSDBA;PWD=masterkey;DBNAME=127.0.0.1:C:\\path\\DB.GDB;";
    

    注意:

    • OdbcFb.dll 必须对您的应用程序可见(位于同一目录或系统 PATH 中)
    • 应该注意选择合适的库架构,即 32 位或 64 位。

    【讨论】:

    • 魔法是(很可能)FileExtns(详情在Microsoft Docs),即set*.fdb,*.gdb
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2020-10-11
    相关资源
    最近更新 更多