问题
Is it possible to make ODBC connection without system-wide driver installed? Can I just point a DLL that contains the driver?
I use it in C++, 32bit, currently testing on Windows, and connect to the Firebird Database. I tried following connection string, that doesn't work:
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;";
The error message: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
回答1:
Yes, a DSN-less connection can be made to an un-registered ODBC Driver, by fully specifying the connect string.
This line, as used when the driver is installed properly --
"DRIVER=Firebird/InterBase(r) driver;"
-- which really should be this, to reference the driver by name --
"DRIVER={Firebird/InterBase(r) driver};"
-- should be changed to this --
"DRIVER=C:\\Windows\\System32\\OdbcFb.dll;"
It appears that if the %PATH%
is not set correctly (to include the directory containing the odbcfb.dll
) and/or if the FB driver is not registered with the MDAC driver manager, you must include the FB-specific client
keyword pointing to the odbcfb.dll
, in which case you should not need any reference to odbcfb.lib
.
You may benefit from reading the driver's own documentation for creating DSNs and for DNSless connections...
回答2:
Firebird ODBC Driver contains small static library (named OdbcFb.lib
) that should be linked within the application. Under the hood it probably preloads the dll and registers it as a new driver somehow.
When such library is linked, the connection string that works is:
"DRIVER=OdbcFb.dll;UID=SYSDBA;PWD=masterkey;DBNAME=127.0.0.1:C:\\path\\DB.GDB;";
What surprised me, when you omit DRIVER it also works, choosing apriopriate driver by using some magic:
"UID=SYSDBA;PWD=masterkey;DBNAME=127.0.0.1:C:\\path\\DB.GDB;";
Note that:
- the
OdbcFb.dll
has to be visible for your application (be at the same directory or in system PATH) - one should be aware of choosing apriopriate library architecture, namely 32-bit or 64-bit.
来源:https://stackoverflow.com/questions/54826254/connect-odbc-without-driver-installed