如何使用C#中的cwbx.dll和AS400System类设置库列表到IBM i(iSeries)

时间:2015-07-30 12:59:04

标签: c# dll odbc rpgle

我使用客户端访问驱动程序对IBM i(iSeries)进行sql调用。使用驱动程序时,我可以指定在发出sql命令/函数时使用的库列表。

我现在需要从C#访问iSeries并调用CL / RPGLE程序。我发现在添加对cwbx.dll的引用后我可以创建一个AS400System对象。但是,我不确定如何设置库列表,并且无法在cwbx.dll上查找文档。有没有其他人能够使用此对象来设置库列表?

2 个答案:

答案 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
  • 注意我使用了术语“程序界面”。从技术上讲,它是入口点或主线程序界面