gpt4 book ai didi

c# - Odbc 连接字符串格式,找不到文件

转载 作者:太空狗 更新时间:2023-10-30 00:56:18 25 4
gpt4 key购买 nike

这是一个可能只有一个答案的“双重”问题。

我正在使用带有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com