我需要通过iSeries数据库从C#程序运行SQL查询,其中查询包含与主查询中的表不同的库中的表的子查询。
以前我们通过使用库名称限定子查询中的表来执行此操作,但是程序必须在多个环境中运行,因此查询字符串中不允许使用硬编码的库名。
为了尝试这个,我将DBQ参数放在连接字符串中,其中包含两个库。 [编辑]连接字符串完整(在.dsn文件中的单独行上):
DRIVER=iSeries Access ODBC Driver
QUERYTIMEOUT=0
PKG=[LIBRARY]/DEFAULT(IBM),2,0,1,0,512
LANGUAGEID=ENU
DBQ=,MAINLIB,OTHERLIB
SYSTEM=[IP ADDRESS]
UID={0}
PWD={1}
将UID和PWD替换为特定于环境的配置文件中的值。
根据this page,使用逗号开始DBQ参数中的库列表将不指定默认库 - 否则列表中的第一个库将用于查询中的非限定表名
当我尝试使用此配置运行查询时,我的程序返回一个ODBCException,其中包含“[iSeries Access ODBC Driver] [DB2 UDB] SQL0204 - [用户ID(!)]类型中的[表名] *未找到文件“。
我也尝试过“DBQ = * USRLIBL”,它应该用户的库列表替换参数。
有没有人知道为什么,在缺少默认库的情况下,连接会将用户配置文件视为默认库,并且有人可以建议我如何使其工作吗?