在未安装驱动程序的情况下连接 ODBC

Connect ODBC without driver installed

是否可以在不安装全系统驱动程序的情况下进行 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

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

这一行,驱动安装正确时使用--

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

-- 这真的应该是这个,按名称引用驱动程序 --

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

--应该改成这个--

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

看来如果%PATH%设置不正确(包括包含odbcfb.dll的目录)and/or如果FB驱动没有在MDAC驱动管理器中注册,您必须包含指向 odbcfb.dll 的特定于 FB 的 client 关键字,在这种情况下您不需要任何对 odbcfb.lib.

的引用

您可能会受益于阅读驱动程序自己的 creating DSNs and for DNSless connections...

文档

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 必须对您的应用程序可见(在同一目录或系统路径中)
  • 应该注意选择合适的库架构,即 32 位或 64 位。