我使用客户端访问驱动程序对IBM i(iSeries)进行sql调用。使用驱动程序时,我可以指定在发出sql命令/函数时使用的库列表。
我现在需要从C#访问iSeries并调用CL / RPGLE程序。我发现在添加对cwbx.dll的引用后我可以创建一个AS400System对象。但是,我不确定如何设置库列表,并且无法在cwbx.dll上查找文档。有没有其他人能够使用此对象来设置库列表?
答案 0 :(得分:3)
问及回答,我知道。但这是我对提出的问题的回答。
cwbx.Command调用中的命令CHGLIBL LIBL(<space-separated list of libraries>)
将强制AS / 400用户库列表成为所需的列表。它还强制库列表与指定的顺序相同。
另外,在IMO中,CWBX API在调用AS / 400程序(尤其是CL)时提供了比SQL接口更多的错误细节。
答案 1 :(得分:2)
根据doc:“CWBX.DLL(编程接口)允许以编程方式执行数据传输操作”
这不是你想要做的。
您可能想要使用DB2 for i .NET provider。
在IBm iAccess安装期间选择“Programmer's Toolkit”时,会安装提供程序的文档。
进一步挖掘,CWBX.DLL的文档可以在以下位置找到:
C:\ Program Files(x86)\ IBM \ Client Access \ MRI2924 \ cwbx.hlp
您似乎无法操作命令的库列表。仅通过DatabaseUserLibraryList对象进行数据传输。
从.NET调用RPGLE / CL的推荐方法是将它们称为SQL存储过程。从技术上讲,考虑到操作系统的基于对象的特性,盒子上的每个* PGM(或* SRVPGM中的过程)对象都已经是一个存储过程,可以使用SQL调用命令隐式调用。但是,使用带有CREATE PROCEDURE
子句的EXTERNAL NAME
语句显式定义DB的RPG / CL接口是有益的,并建议如下所示。
来自此article
的示例假设你有一个名为CUSTINFO的* PGM,带有以下程序界面(又名* ENTRY PLIST)
D CustInfo PI
D CustNo 5P 0
D Name 15A
D City 25A
D State 2A
D Active 1P 0
在输入CustNo的地方,其余的parms用作输出。然后,只需运行以下命令即可将此程序显式定义为SQL存储过程:
CREATE PROCEDURE GetCustInfo
(IN CustNo DEC (5,0), OUT Name CHAR (15), OUT City CHAR(25),
OUT St CHAR(2), OUT Act DEC(1,0))
EXTERNAL NAME MYLIB/CUSTINFO
LANGUAGE RPGLE
PARAMETER STYLE GENERAL