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

标签 c# asp.net configuration odbc ibm-midrange

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

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

相关文章:

c# - 无法将 JSON 数组反序列化为 C# 列表

c# - 按钮点击不起作用

asp.net - 限制键盘输入 jQuery

c# - Moq 返回 null 和 BadRequestObjectResult

c# - 如何在aspx页面中获取jquery的post请求参数

git - MyRepos (MR) 默认配置

c# - 必须允许委托(delegate)线程完成

c# - 根据结果​​集更新或插入数据库中的记录

asp.net - 无法使用前导 ../在顶级目录之上退出

Eclipse:无论正在编辑哪个文件,我怎样才能使 Ctrl+F11 工作?