不带数据库名称的DB2 ODBC连接字符串

不带数据库名称的DB2 ODBC连接字符串,db2,odbc,Db2,Odbc,我正在尝试用ODBC连接DB2服务器,如果我在连接字符串中指定数据库,那么ODBC工作正常 driver = 'IBM DB2 ODBC DRIVER' server = '10.30.30.114' port = '50000' protocol = 'TCPIP' database = 'SAMPLE' user = 'administrator' pass = 'password' DBI.connect("DBI:ODBC:Driver=#{driver};HostN

我正在尝试用ODBC连接DB2服务器,如果我在连接字符串中指定
数据库
,那么ODBC工作正常

driver   = 'IBM DB2 ODBC DRIVER'
server   = '10.30.30.114'
port     = '50000'
protocol = 'TCPIP'
database = 'SAMPLE'

user = 'administrator'
pass = 'password'

DBI.connect("DBI:ODBC:Driver=#{driver};HostName=#{server};Port=#{port};Protocol=#{protocol};Database=#{database};Uid=#{user};Pwd=#{pass};")

问题是,在连接到服务器时,我不会预先知道数据库名称。我想要服务器上的数据库列表,然后是这些数据库中的表,我应该如何处理?

您不能通过ODBC“连接到DB2服务器”;您只能连接到数据库,显然需要为其指定数据库名称。您可以使用DB2C/C++API调用
db2DbDirOpenScan
db2dbdirgetnextry
列出数据库目录,但此代码需要在服务器本身上执行,否则,它将尝试列出客户端计算机上的数据库目录。

如果您正在连接到DB2 for i服务器(以前是OS/400上的DB2 UDB)--

最初使用主机名连接,允许数据库默认。然后可以在DB2fori视图中获得数据库列表。您的查询可能如下所示:

SELECT catalog_name,        -- database name
       catalog_text         -- DB description
FROM QSYS2.SYSCATALOGS
WHERE catalog_type='LOCAL'  -- local to that host
  AND catalog_status='AVAILABLE'  -- REMOTE catalogs are 'UNKNOWN' status
如果需要,您可以连接到该数据库。连接到适当的数据库后,可以查询其他数据库,如和。而且也可以使用


如果愿意,可以通过IBM i Access在ODBC连接之外使用。

这是针对DB2 LUW的特定于平台的答案。