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

How to set library list using cwbx.dll and AS400System class from C# to IBM i (iSeries)

我使用客户端访问驱动程序对 IBM i(一个 iSeries)进行 sql 调用。使用驱动程序时,我可以指定发出 sql commands/functions.

时将使用的库列表

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

据此doc:"CWBX.DLL (The Programmatic interface) allows to do Data Transfer operations programmatically"

那不是你想要做的。

您可能想要使用 DB2 for i .NET provider

当您在 IBM iAccess 安装期间 select "Programmer's Toolkit" 安装提供程序的文档。

进行了更多挖掘,CWBX.DLL 的文档可在以下位置找到:
C:\Program Files (x86)\IBM\Client Access\MRI2924\cwbx.hlp

您似乎无法为命令操作库列表。仅通过 DatabaseUserLibraryList 对象传输数据。

从 .NET 调用 RPGLE/CL 的推荐方法是将它们作为 SQL 存储过程调用。从技术上讲,考虑到 OS 的基于对象的性质,框中的每个 *PGM(或 *SRVPGM 中的过程)对象已经是一个存储过程,可以使用 SQL 调用命令隐式调用。但是,使用带有 EXTERNAL NAME 子句的 CREATE PROCEDURE 语句明确定义 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,其余参数用作输出。然后,您可以通过 运行 将此程序显式定义为 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
  • 注意我使用了术语 "program interface"。从技术上讲,它是 入口点或主线过程接口

一问一答,我知道了。但这是我对所提出问题的回答。

cwbx.Command 调用中的命令 CHGLIBL LIBL(<space-separated list of libraries>) 将强制 AS/400 用户库列表成为所需的列表。它还强制库列表与指定的顺序相同。

此外,IMO,在调用 AS/400 程序(尤其是 CL 程序)时,CWBX API 提供了比 SQL 接口更多的错误详细信息。