是否可以以编程方式从ODBC DSN获取服务器详细信息?

时间:2014-06-21 07:43:39

标签: odbc dsn

我正在处理psqlODBC的XA / MSDTC事务处理的一些问题,我发现自己需要从任何用户提供的dsn以编程方式获取服务器连接详细信息(主机名,端口等)没有通过驱动程序管理器调用psqlODBC来执行此操作。

刚解析的键/值字符串对会做;问题是解析用户/系统/文件DSN以获取基础连接信息。

我试图解决的基本问题是在64位系统上使用MSDTC的32位应用程序将提供适用于32位PostgreSQL驱动程序的DSN。 64位PostgreSQL驱动程序具有不同的名称 - PostgresSQL ANSI vs PostgreSQL ANSI(x64),类似于Unicode驱动程序。因此,适用于32位应用程序的DSN不适用于64位应用程序......例如msdtc.exe。所以我需要一种方法来获取所使用的32位应用程序的连接参数,并将它们提供给64位ODBC驱动程序(或直接转到libpq)。

对于无DSN连接字符串,例如:

DRIVER={{PostgreSQL ANSI}};SERVER=127.0.0.1;PORT=5432;DATABASE=SOMEDB;UID=Administrator;PWD=;CA=disable"

我可以解析它以获取相关信息,但这对于文件,系统或用户DSN不起作用,其中MSDTC使用的XA事务协调器只能获取原始用户应用程序传递给的任何内容。 ODBC层 - 如:

DSN=SomeUserOrSystemDSNName

FILEDSN=C:\SomeFileDSN.dsn

并且包含在DSN中的是DRIVER={{{PostgreSQL ANSI}}

我已经查看了ODBC API文档,但我看不到任何似乎暴露加载任何DSN字符串的方法,解析文件/系统/用户DSN并获取参数哈希/地图。 OTOH,那里有很多的文档,而且有些部分和功能名称并不是我所谓的可预测的。

所以 - 请告诉我,我错过了一些明显的东西,而且还有一种方法可以:

GetDSNProperty("FILEDSN=C:\SomeFileDSN.dsn", "SERVER");

..而不是编写hacky代码来手动查找每个DSN类型。

0 个答案:

没有答案