-
- .NET调用AS/400上的程序(.NET CALL AS/400 PGM) 补遗
- Weather:晴,2-7度
- 2008-12-08
上篇写到用IBM.Data.DB2.iSeries调用AS400时,只能把AS400当做纯DB2数据库来用;后来左思右想,IBM既然出这么个单独的针对.NET2.0的工具,不可能功能就这么简单的啊。于是继续查红皮书,在成堆的蚯蚓文中,终于找到了,原来用IBM.Data.DB2.iSeries来进行AS400 CALL PRAGROM(RPG,RPGLE,COBOL)是如此之简单,虽然不像CWBX.DLL那样那么专业的设置各种参数,但是对于快捷开发以及代码简洁度上,还是前者更胜一筹吧。
下面的代码主要来自于红皮书。先上一个封装起来的方法
static bool CallPgm(String cmdtext, iDB2Connection cn)
{
bool rc = true;
// 构造QCMDEXEC可用的命令文本.
// 由于 QCMDEXC 使用单引号,我们必须将命令文本中的单引号
// 替换成”双单引号”
String pgmParm = "CALL QSYS.QCMDEXC('"
+ cmdtext.Replace("'", "''")
+ "', "
+ cmdtext.Length.ToString("0000000000.00000")
+ ")";
// 创建COMMAND对象(.NET的COMMAND).
iDB2Command cmd = new iDB2Command(pgmParm, cn);
try
{cmd.ExecuteNonQuery();}
catch (Exception)
{rc = false;}
cmd.Dispose();
return rc;
}接着是实例测试(如何使用):
// 建立服务器连接.
iDB2Connection cn = new iDB2Connection("Provider=IBMDA400.DataSource.1;Data Source=SERVER_IP;User ID=USERID;Password=USERPWD;Default Collection=LIBNAME;");
cn.Open();
// 调用 MYCLPGM 程序(测试,调用三次,不成功则不再调用).
String cmdtext = “call sampledb/myclpgm parm(‘不含引号的命令文本')";
bool rc = CallPgm(cmdtext, cn);
if (rc == true)
{
cmdtext = “call sampledb/myclpgm parm(‘含单引号的文本('')')";
rc = CallPgm(cmdtext, cn);
}
if (rc == true)
{
cmdtext = “call sampledb/myclpgm parm(‘含双引号的文本(\")')";
rc = CallPgm(cmdtext, cn);
}
if (rc == true)
Console.WriteLine("The calls completed successfully.");
else
Console.WriteLine("One of the calls failed.");
cn.Close(); //关闭连接PS:为了一个可能性的存在,就是可能会有同学会在LINUX,UNIX以及其它WINDOWS下等非.net环境下连接AS400进行操作,那请到IBM的网站搜索”IBM.Data.DB2“这个关键词,这是为你们而准备的,不用客气 :)
-
Views(1058) | Comments(2) |
In:
AS400について
|
(11/23)
N3C开发记事本
[.NET调用AS/400上的程序(.NET CALL AS/400 PGM) 补遗]的回复
-
trACY
于
2008-12-18 17:42:25
发表 |
IP:119.109.20.*
园主 来杯热可可吧......
-
柠檬园主
于
2008-12-19 21:58:01
发表 |
IP:119.109.17.*
来杯摩卡咖啡吧。
