从 .NET 应用程序访问 AS400 业务逻辑






4.89/5 (16投票s)
2003年10月17日
2分钟阅读

274185

666
本文描述了如何从 .NET 应用程序调用驻留在 AS400 机器上的 COBOL 程序。
引言
公司的数据可能分散在旧系统中、定制的业务应用程序中以及组织不同部分的数据库中。 集成和利用所有这些数据和应用程序的能力有助于我们减少现有应用程序的重用、缩短开发时间和降低风险。
我也遇到了类似的场景,我必须从 .NET 应用程序中重用在 AS/400 上开发的 COBOL 数据和业务逻辑。 本文是一个适度的方法,它使用一个例子描述了以上内容。
关于应用程序
这里解释的应用程序有三个按钮。 “添加”按钮将输入数据发送到 COBOL 程序,该程序在 AS/400 机器上可用。 此 COBOL 程序验证输入的用户信息。 如果是有效数据,它会更新驻留在 AS/400 上的物理文件 (USERS)。 “删除”按钮根据提供的用户 ID 从同一物理文件中删除一行。“退出”按钮关闭应用程序。
我开发的 .NET 应用程序读取用户输入并调用 COBOL 程序。 COBOL 程序传递用户输入的数据并接收 COBOL 程序返回的值。 三个文本框为程序提供输入参数。 它们包含要更新的数据。
AS/400 机器名称(连接字符串)和 COBOL 程序所在的库在app.config文件中配置。 这允许我们在不需要重新编译程序的情况下更改这些值。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ProgramName" value="pgm1" />
<add key="Library" value="lib1" />
<add key="ConnectionString" value="conn1"/>
</appSettings>
</configuration>
其中
pgm1
= COBOL 程序的名称lib1
= AS/400 上 COBOL 程序所在的库conn1
= AS/400 的连接字符串
"Provider=IBMDA400.DataSource.1;User ID=XXXX;Password=YYYYY;Data
Source=123.123.123.123;Connect Timeout=_
30;SSL=DEFAULT;Transport Product=Client Access"
此应用程序使用 ADODB 作为连接到数据库的接口。 它有三个主要对象 - connection
对象、command
对象和 recordset
。 command
对象用于从 connection
对象执行命令文本。 参数存储在命令参数中,并在运行时读取这些值。 当 command
对象中的命令类型为 text
时,我们必须为参数数量指定一个占位符。 IBM Client Express 的 IBMDA400 OLEDB 提供程序用于连接到 AS/400。
以下代码显示了我们如何使用 command
对象传递三个参数
command = New ADODB.Command
OpenConnection()
command.ActiveConnection = conn
command.CommandType = ADODB.CommandTypeEnum.adCmdText
command.Parameters.Append(command.CreateParameter("P1",_
ADODB.DataTypeEnum.adChar, _
ADODB.ParameterDirectionEnum.adParamInputOutput,5))
command.Parameters.Append(command.CreateParameter("P2",_
ADODB.DataTypeEnum.adChar, _
ADODB.ParameterDirectionEnum.adParamInputOutput,10))
command.Parameters.Append(command.CreateParameter("P3", _
ADODB.DataTypeEnum.adChar, _
ADODB.ParameterDirectionEnum.adParamInputOutput, 10))
以下代码调用 COBOL 程序
command.CommandText = "{{CALL /QSYS.LIB/" & _
lib_str & ".LIB/" & program_str & ".PGM(?,?,?)}}"
command.Prepared = True
Dim Rcds As Object = New Object
command.Execute(Rcds, a, command.CommandType.adCmdText)
我们还可以直接在 AS/400 物理文件上执行 SQL 查询。 当我们需要在没有任何预处理的情况下更改数据时,这是一个正确的解决方案。 为了实现删除功能,我使用了这个过程。
command.CommandType = ADODB.CommandTypeEnum.adCmdText
command.CommandText = "DELETE FROM " & _
libr_str & ".USERS1 WHERE USERID =" & txtUserId.Text
command.Execute()
结论
我们可以从我们的 .NET 应用程序中操作存储在 AS/400 上的数据。 我们可以集成应用程序,或者使用这种方法在我们 .NET 解决方案中使用已经在 AS/400 上实现的业务逻辑。