Odbc连接字符串格式,不查找文件
本文关键字:查找 文件 格式 连接 字符串 Odbc | 更新日期: 2023-09-27 18:14:55
这是一种可能只有一个答案的"双重"问题。
我正在使用与AS/400的Odbc连接,连接字符串如下:
driver={iSeries Access ODBC Driver}; system={0}; uid={1}; pwd={2}; DefaultLibraries=*USRLIBL;
我可以很好地连接到系统。
*USRLIBL包含来自用户的所有必要库(类型为'API only',可以访问所有用户库)。
然而,当我试图访问某些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,因为它实际上会使服务器崩溃)
为什么第二个攻略抛出一个异常,它似乎只是"跳过"*USRLIBL从LibraryB读取后,甚至一次。
任何想法吗?
开始编辑:
实际上有两个用户,DEV和PROD
*USRLIBL从环境本身获取所有必要的库,因此,如果在打开连接时,它检测到本地主机环境或任何不安全的环境(加上一些其他警告),则在创建连接之前,它默认使用DEV登录凭据。这就是为什么system、uid和pwd被指定为连接中的参数(而不仅仅是stackoverflow i - not -want-to- out-data占位符)
*USRLIBL然后从API用户那里提取必要的库。
澄清一下,它的设置方式是使用iDB2连接器工作的,但是由于我们的ERP系统的限制(我们认为),在IIS 7服务器上使用它会导致灾难性的失败,所以我们使用ODBC连接器。
结束编辑:
可以将表名限定为库。文件名,而不必处理任何库列表问题。
查看更多信息:
Client Access ODBC: Default Libraries Setting
ODBC连接字符串关键字
相关部分节选如下:
使用SQL命名约定,操作系统不会执行库列表搜索来定位不合格的对象。如果定义了默认集合,则使用默认集合来解析非限定SQL语句。
…
使用SYS命名约定,不合格的SQL语句进入默认集合。如果没有默认集合,则使用当前库。如果没有指定当前库,则使用库列表。
…
默认收藏
ODBC设置的一个作业属性,用于确定处理包含非限定SQL名称的SQL语句时使用的库。当设置默认集合时,除了过程、函数和类型之外的所有非限定对象都必须驻留在默认集合中,而不考虑命名约定。
…
如何让ODBC搜索库列表?
如上所述,编辑ODBC数据源并将系统命名设置为SYS。默认库必须为空,或者在R510之前的版本中,默认库设置必须以逗号开头,以便不定义默认集合(例如,",MYLIB1, MYLIB2")。
尝试此连接字符串以启用系统命名,并且不设置默认库:
driver={iSeries Access ODBC Driver}; system={0}; uid={1}; pwd={2}; naming=1; DefaultLibraries=,*USRLIBL,LibraryB;
如果有人看到这篇文章,并且正在使用IBM.Data.DB2. xml。我是iSeries . net数据提供者,从上面得到的关键点是使用naming=1
而不指定"默认集合"。当我在连接字符串
LibraryList= MyLibrary1,MyLibrary2,MyLibrary3,MyLibrary4;naming=1;
另一种方法是为每个环境设置单独的用户配置文件。由于*USRLIBL是由职位描述设置的,因此这也需要设置一个单独的职位描述。例如:
user: WEB job desc: WEB library list: CUSTPROD, ITEMPROD, UTILITY
user: WEBTEST job desc: WEBTEST library list: CUSTTEST, ITEMTEST, UTILITY
c#代码没有改变,除了使用测试或生产用户ID进行身份验证。