-
- .NET调用AS/400上的程序(.NET CALL AS/400 PGM)
- Weather:晴转阴,东北风5-6级转西北风5-6级,(-5~-2)℃
- 2008-11-17
.NET连接AS/400有以下几种方式
- OLEDB(CA)
- ODBC(CA)
- IBM.Data.DB2.iSeries(CA*)
- CWBX(CA*)
后面标有(CA)说明,这四种连接方式都是基于CLIENT ACCESS的,而后面两种,其实只是需要CA装完后提取出两个相应的DLL就可以了,前两种则得依赖系统安装CA进行驱动支持。
几种连接方式能进行的操作也是各有区别的
- OLEDB,可进行SQL查询操作,可以CALL 400上的CL程序
- ODBC,实现的功能同OLEDB
- IBM.Data.DB2.iSeries,理论上也是支持上述2种,但目前我只用成了SQL查询和存储过程调用,CALL程序一直没试成功,也可能压根就不支持
- CWBX,IBM提供的标准的访问AS/400上的程序的DLL,当然,也只能进行程序的CALL操作
SQL查询操作没什么好说的,主要说一下CALL程序
第一种,OLEDB方式(ODBC同此,只是连接方式不同)
const string connStr = @"Provider=IBMDA400.DataSource.1;Data Source=192.168.101.8;User ID=AST009;Password=AST009;Default Collection=AST009OLIB";
OleDbConnection conn = new OleDbConnection(connStr);
OleDbCommand cmd = new OleDbCommand(@"{{CALL LCDOLIB/PAB010(?, ?)}}", conn);
conn.Open();
cmd.Parameters.Add("PARM1",OleDbType.Char, 128);
cmd.Parameters["PARM1"].Value = textBox2.Text;
cmd.Parameters["PARM1"].Direction = ParameterDirection.Input;
cmd.Parameters.Add("PARM2", OleDbType.Char, 128);
cmd.Parameters["PARM2"].Value = string.Empty;
cmd.Parameters["PARM2"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
string result = cmd.Parameters["PARM2"].Value;
//do something with result
//...第二种,使用CWBX方式
using System;
using cwbx;
namespace dotNetTest
{
public class AS400Program
{
private cwbx.AS400System as400;
private cwbx.Program pgm;
public AS400Program()
{
as400 = new cwbx.AS400SystemClass();
pgm = new cwbx.Program();
//config program
as400.Define("192.168.101.8");
pgm.system = as400;
pgm.system.UserID = "ast009";
pgm.system.Password = "ast009";
pgm.libraryName = "AST009OLIB";
pgm.ProgramName = "PAB010";
//run program
as400.Connect(cwbx.cwbcoServiceEnum.cwbcoServiceRemoteCmd);
//define the as400 rpg's parameters
cwbx.ProgramParameters parameters = new cwbx.ProgramParametersClass();
parameters.Append("INPARM1", cwbx.cwbrcParameterTypeEnum.cwbrcInput, 128);
parameters["INPARM1"].Value = stringConverter.ToBytes(partId.PadRight(128, ' '));
parameters.Append("OUTPARM1", cwbx.cwbrcParameterTypeEnum.cwbrcOutput, 128);
program.Call(parameters);
string result = stringConverter.FromBytes(parameters["OUTPARM1"].Value);
program.Close();
as400.Disconnect(cwbx.cwbcoServiceEnum.cwbcoServiceAll);
//do something with result
//...
}
}
}那么,很重要的问题,IBM.Data.DB2.iSeries.dll和CWBX.dll从哪儿来呢?
答案:安装CLIENT ACCESS,安装时注意要选择.NET支持,这样在CA的程序目录里就会有第一个DLL,而后面的CWBX同样在CA程序目录的某个文件夹下,搜索吧。
-
Views(10169) | Comments(6) |
In:
AS400について
|


[.NET调用AS/400上的程序(.NET CALL AS/400 PGM)]的回复
-
re 于 2008-11-18 00:20:57 发表 | IP:114.93.105.*
Google 又开始收录3rgb了: http://www.google.cn/search?q=site%3A3rgb.com 336项结果。
-
柠檬园主 于 2008-11-18 20:32:47 发表 | IP:119.109.17.*
哈哈,是哈。不過已經不再看重那些了。。。
俺的N3C已經打好基礎了,開始擴展了。
-
大雾雾 于 2008-11-20 09:17:37 发表 | IP:123.120.200.*
http://bbs.55bbs.com/thread-2115146-1-1.html柠檬这个是我发的地瓜面包的方子。。。。。不过微波炉肯定烤不了啦~~~
- 4# Sutra 于 2008-11-25 22:50:15 发表 | IP:114.93.105.*
N3C是个啥子的缩写?
- 5# 柠檬园主 于 2008-11-26 22:31:38 发表 | IP:119.109.16.*
过阵就知道了,不过估计你也猜个差不多了
- 6# Lao Tang 于 2020-04-15 02:11:01 发表 | IP:185.152.67.*
- 如果传入的参数是in out 的 decimal(15,2)应该怎么各回各家