这是一个可能只有一个答案的“双重”问题。
我正在使用带有 AS/400 的 Odbc 连接,我的连接字符串如下:
driver={iSeries Access ODBC Driver}; system={0}; uid={1}; pwd={2}; DefaultLibraries=*USRLIBL;
我可以正常连接到系统。
*USRLIBL 包含来自用户的所有必要库(属于“仅 API”类型,可以访问所有用户库)。
但是,当我尝试访问某些 ERP 库时,它说找不到它们,而其他的则可以。
作为一个非常基本的演练:
1. Open Connection - Query File 1 from Library A: OK! - Close Connection
2. Open Connection - Query File 2 from Library A: OK! - Close Connection
3. Open Connection - Query File 1 from Library B: Exception SQL0204 - in UserName type *FILE not found
好的,所以我在ERP文件所在的特定库中添加,使连接字符串如下,只是为了测试程序:
driver={iSeries Access ODBC Driver}; system={0}; uid={1}; pwd={2}; DefaultLibraries=*USRLIBL, LibraryB;
但后来我开始遇到一个不同的问题(另一个非常基本的演练)
1. Open Connection - Query File 1 from Library A: OK! - Close Connection
2. Open Connection - Query File 2 from Library A: OK! - Close Connection
3. Open Connection - Query File 1 from Library B: OK! - Close Connection
4. Open Connection - Query File 1 from Library A again: Exception SQL0202 - in LibraryB type *FILE not found.
所以我的问题是:
为什么 odbc 连接字符串 DefaultLibraries=*USRLIBL 没有返回正确的库? (注意:我还使用实际上工作正常的 iDB2Connection 对此进行了测试......但是,iDB2Connection 无法部署,因为它实际上会使服务器崩溃)
为什么第二个演练抛出异常,它似乎只是在从 LibraryB 读取一次后“跳过”*USRLIBL。
有什么想法吗?
开始编辑:
其实有两个用户,DEV和PROD
*USRLIBL 从环境本身获取所有必要的库,因此如果在打开连接时,它检测到本地主机环境或任何不安全的环境(加上一些其他警告),它默认使用 DEV 登录凭据 在创建连接之前。这就是为什么系统、uid 和 pwd 被指定为连接中的参数(而不仅仅是 stackoverflow I-dont-want-to-give-out-data 占位符)
*USRLIBL 然后从 API 用户那里提取必要的库。
澄清一下,它的设置方式确实适用于使用 iDB2 连接器,但由于我们的 ERP 系统的局限性(我们认为),将它与 IIS 7 服务器一起使用会导致灾难性故障,因此我们正在使用ODBC 连接器。
结束编辑:
最佳答案
您可以将表名限定为 library.filename,而不必处理任何库列表问题。
更多信息:
Client Access ODBC: Default Libraries Setting
ODBC connection string keywords
相关部分摘录如下:
使用 SQL 命名约定,操作系统不会执行库列表搜索来定位不合格的对象。如果定义了默认集合,则默认集合用于解析不合格的 SQL 语句。
...
使用 SYS 命名约定,不合格的 SQL 语句进入默认集合。如果没有默认集合,则使用当前库。如果未指定当前库,则使用库列表。
...
默认集合
由 ODBC 设置的作业属性,用于确定在处理包含非限定 SQL 名称的 SQL 语句时使用的库。当设置默认集合时,除过程、函数和类型之外的所有非限定对象都必须位于默认集合中,无论命名约定如何。
...
如何让ODBC搜索库列表?
如上所述,编辑 ODBC 数据源并将系统命名设置为 SYS。默认库必须为空,或者在早于 R510 的版本上,默认库设置必须以逗号开头,以便不定义默认集合(例如,“,MYLIB1, MYLIB2”)。
尝试使用此连接字符串启用系统命名并且不设置默认库:
driver={iSeries Access ODBC 驱动程序};系统={0}; uid={1};密码={2};命名=1; DefaultLibraries=,*USRLIBL,LibraryB;
关于c# - Odbc 连接字符串格式,找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8172879/