如何使用 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 接口更多的错误详细信息。
我使用客户端访问驱动程序对 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 接口更多的错误详细信息。