《IBM CICS 培训资料.doc》由会员分享,可在线阅读,更多相关《IBM CICS 培训资料.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、CICS培训CICS简介三层结构的客户/服务器模型是一种先进的协同应用程序开发模型,这种方案将客户/服务器系统中各种各样的部件划分为三层服务,它们共同组成一个应用程序,这三层服务包括: 1)、客户端服务程序; 2)、业务服务和其它中间层服务程序; 3)、数据服务(数据库)。CICS其全称是 Customer Information Control System,即客户信息控制系统。是一系列为应用提供联机事务处理和事务管理的产品,其功能是为商业应用提供一个事务处理环境,帮助客户建立三层次结构的联机事务处理应用,CICS 有效地区分应用系统中的表述逻辑层、业务逻辑层和数据逻辑层,从而使应用系统结构
2、清晰,维护简单易行。CICS提供了事务处理中的共同需要的几乎所有功能模块,如:请求接收处理错误安全管理性能监控资源管理可联接性逻辑锁多线程并行日志时序控制事务调度事务授权事务恢复事务管理事务一致性完成队列服务管理客户仅需要将他们的注意力集中在他们的业务逻辑上,从而快速地开发适合他们的业务需要的应用程序。软件系统结构:客户端服务器端客户软件CICS接口CICS ClientCICS ServerServer 端程序DBMS Server连接db事务处理其中:客户软件实现用户界面,简单的本地处理,对数据库的读写由中间件CICS实现。CICS接口实现对后台的调用,CICS Server 端程序实现对
3、DBMS Server的调用。需要完成工作:1客户软件2CICS Server 端程序各部分作用:CICS接口+Server端程序 类似于 DLLCICS接口实现对Server端程序的调用客户软件调用CICS接口CICS接口CICS编程接口类型:服务器端接口:C、COBOL、PL/1 语言客户端接口:1) OLE2) ECI:External Call Interface(ECI)EasyCICSEasyCics是针对IBM的CICS系统开发的一套简易的程序开发界面。它是主要目的是缓解数据交换的难度,便于各种前端开发工具访问CICS系统。EasyCics分为服务器和客户机两部分。服务器部分提供
4、增强的C语言函数库和头文件,客户机部分提供C函数库和头文件,JAVA支持,OLE组件,供C、JAVA、VB、PB和DELPHI等开发者访问CICS时使用。EasyCics解决的CICS开发疑难问题:l 数据量大于32K问题,EasyCics对最终用户透明支持。l 平台数据移植问题,不必考虑高低位转换和对齐方式。对前台工具的广泛支持:C/JAVA/VB/DELPHI/PowerBuilder/Notes/IE/Office97/Win98 scriptCICS SERVER端程序:EasyCics通用流程(最简):EasyCics提供以下支持文件供开发者使用:easycics.h(C语言头文件)
5、easycics.ccseasycics.umk(for UNIX)或easycics.nmk(for NT)由此编译生成:easycics.o(for UNIX)或 easycics.obj(for NT) 调用InitEasyCics函数 使用GetValue函数获取输入的条件 调用BeginWrite函数 使用SetValue函数或RsCreate函数设置输出的结果 调用ExitEasyCics函数退出程序注意事项:程序入口处必须调用InitEasyCics函数程序出口处必须调用ExitEasyCics函数说明:参数名、程序名、客户端调用名等为大写CICS端程序的编译:环境:DB2 CL
6、IENT(含开发包);CICS SERVER环境(主要是CICS的环境变量);VC+;能够连接到数据库;参数说明:CICS参数的传递,使用字符串格式;传入前,要转换为字符串;接收时,再转换为本地类型;过程:进入COMMAND方式;执行VC批处理,设置VC环境;执行DB2CMD,进入DB2环境;执行nmake f .makMAK文件:Getdate.mak:all: getdate getdate.ccs : getdate.sqc;db2 connect to test user db2admin using admindb2 prep getdate.sqc bindfiledb2 bind
7、 getdate.bnddb2 grant execute on package getdate to public#del getdate.ccsmove getdate.c getdate.ccsgetdate: getdate.ccs easycics.h;set CICS_MSC_FLAGS=-I”$(DB2PATH)include”set USERLIB=”$(DB2PATH)libdb2api.lib” easycics.objcicstcl -e -d -lC getdate.ccsdel getdate.ccs客户信息;用户读取IC卡,或者输入客户号名称:getcust参数:I
8、C卡号cust_ic_id客户号:CUSTOMER_ID网点号node_id日期:DATE_DBAL返回值:客户号customer_id,名称cust_name,非外烟许可标志can_order,外烟许可标志IS_IMPORTED,期限等提示信息cust_note;二维表:返回客户当天购买合计,共5列:1:商品编号2:商品名称3:交易笔数4:交易数量5:交易金额server 端:getcust.sqc如果输入IC卡号,查找出客户号;如果输入客户号,查找出IC卡号;根据IC卡号,在表PURCH_CARD中,查找客户信息;判断卡是否存在、卡无效、可否购烟;根据客户号,在表LICENCE中,查找许可
9、证信息;判断购烟、外烟标志;根据客户号和网点号,在表customer中,查找客户信息;判断客户有效性、所属网点;根据客户号,在表pos_sales中,取当日购买商品;客户端调用名:GETCUSTE-SQL简介:嵌入SQL的基本特点是:1、 每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。2、 如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“”,在Fortran中必须有续行符。其他语言也有相应规定。3、 每一条嵌入SQL语句都有结束符号,如:在C中是“;”下表是所有的嵌入式SQL语句,“*”表示嵌入
10、式SQL语句的名字同Transact-SQL语句相同。BEGIN DECLARE SECTION PREPARE CLOSE* SELECT INTO* CONNECT TO SET ANSI_DEFAULTS DECLARE CURSOR* SET CONCURRENCY DELETE (POSITIONED)* SET CONNECTION DELETE (SEARCHED)* SET CURSOR_CLOSE_ON_COMMIT DESCRIBE SET CURSORTYPE DISCONNECT SET FETCHBUFFER END DECLARE SECTION SET OPTIO
11、N EXECUTE* SET SCROLLOPTION EXECUTE IMMEDIATE UPDATE (POSITIONED)* FETCH* UPDATE (SEARCHED)* GET CONNECTION WHENEVER OPEN* 嵌入式SQL语句分为静态SQL语句和动态SQL语句两类。下面我们按照功能讲解这些语句。本节讲解静态SQL语句的作用。动态SQL语句将在下一节讲解。同动态SQL相关的一些语句也在下一节中讲解。1 声明嵌入SQL语句中使用的C变量1)、声明方法主变量(host variable)就是在嵌入式SQL语句中引用主语言说明的程序变量(如例1中的last_name
12、变量)。如: EXEC SQL BEGIN DECLARE SECTION; char first_name50; char last_name = White; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT au_fname INTO :first_name from authors where au_lname = :last_name;.在嵌入式SQL语句中使用主变量前,必须采用BEGIN DECLARE SECTION 和END DECLARE SECTION之间给主变量说明。这两条语句不是可执行语句,而是预编译程序的说明。主变量是标准的C
13、程序变量。嵌入SQL语句使用主变量来输入数据和输出数据。C程序和嵌入SQL语句都可以访问主变量。值得注意的是,主变量的长度不能超过30字节。2)、主变量的数据类型在以SQL为基础的DBMS支持的数据类型与程序设计语言支持的数据类型之间有很大差别。这些差别对主变量影响很大。一方面,主变量是一个用程序设计语言的数据类型说明并用程序设计语言处理的程序变量;另一方面,在嵌入SQL语句中用主变量保存数据库数据。所以,在嵌入SQL语句中,必须映射C数据类型为合适的SQL Server数据类型。必须慎重选择主变量的数据类型。请看下面这个例子:EXEC SQL BEGIN DECLARE SECTION;in
14、t hostvar1 = 39;char *hostvar2 = telescope;float hostvar3 = 355.95;EXEC SQL END DECLARE SECTION;EXEC SQL UPDATE inventory SET department = :hostvar1 WHERE part_num = 4572-3;EXEC SQL UPDATE inventory SET prod_descrip = :hostvar2 WHERE part_num = 4572-3;EXEC SQL UPDATE inventory SET price = :hostvar3
15、WHERE part_num = 4572-3;在第一个update语句中,department列为smallint数据类型(integer ),所以应该把hostvar1定义为int数据类型(integer)。这样的话,从C到SQL Server的hostvar1可以直接映射。在第二个update语句中,prod_descip列为varchar数据类型,所以应该把hostvar2定义为字符数组。这样的话,从C到SQL Server的hostvar2可以从字符数组映射为varchar数据类型。在第三个update语句中,price列为money数据类型。在C语言中,没有相应的数据类型,所以用户
16、可以把hostvar3定义为C的浮点变量或字符数据类型。SQL Server可以自动将浮点变量转换为money数据类型(输入数据),或将money数据类型转换为浮点变量(输出数据)。注意的是,如果数据类型为字符数组,那么SQL Server会在数据后面填充空格,直到填满该变量的声明长度。在ESQL/C中,不支持所有的unicode数据类型(如:nvarchar、nchar和ntext)。对于非unicode数据类型,除了datetime、smalldatetime、money和smallmoney外(decimal和numeric数据类型部分情况下不支持),都可以相互转换。下表列出了C的数据类
17、型和datetime、smalldatetime、money、smallmoney、decimal和numeric数据类型的一些转换关系:C数据类型分配的SQL Server数据类型Datetime或smalldatetimeMoney或smallmoneyDecimal或numericShortSmallint不可以不可以不可以IntSmallint不可以不可以不可以LongInt不可以不可以不可以FloatReal不可以不可以不可以DoubleFloat不可以不可以不可以CharCarcharX可以可以可以Void *pBinary(2)可以可以可以Char bytetinyint不可以不
18、可以不可以 因为C没有date或time数据类型,所以SQL Server的date或time列将被转换为字符。缺省情况下,使用以下转换格式:mm dd yyyy hh:mm:ssam | pm。你也可以使用字符数据格式将C的字符数据存放到SQL Server的date列上。你也可以使用Transact-SQL中的convert语句来转换数据类型。如:SELECT CONVERT(char, date, 8) FROM sales。3)、主变量和NULL大多数程序设计语言(如C)都不支持NULL。所以对NULL的处理,一定要在SQL中完成。我们可以使用主机指示符变量(host indicato
19、r variable)来解决这个问题。在嵌入式SQL语句中,主变量和指示符变量共同规定一个单独的SQL类型值。如:EXEC SQL SELECT price INTO :price:price_nullflag FROM titles WHERE au_id = mc3026其中,price是主变量,price_nullflag是指示符变量。指示符变量共有两类值:l -1。表示主变量应该假设为NULL。(注意:主变量的实际值是一个无关值,不予考虑)。l 0。表示主变量包含了有效值。该指示变量存放了该主变量数据的最大长度。所以,上面这个例子的含义是:如果不存在mc3026写的书,那么price_
20、nullflag为-1,表示price为NULL;如果存在,则price为实际的价格。下面我们再看一个update的例子:EXEC SQL UPDATE closeoutsale SET temp_price = :saleprice :saleprice_null, listprice = :oldprice;如果saleprice_null是-1,则上述语句等价为:EXEC SQL UPDATE closeoutsale SET temp_price = null, listprice = :oldprice;我们也可以在指示符变量前面加上“INDICATOR”关键字,表示后面的变量为指示
21、符变量。如:EXEC SQL UPDATE closeoutsale SET temp_price = :saleprice INDICATOR :saleprice_null;值得注意的是,不能在WHERE语句后面使用指示符变量。如:EXEC SQL DELETE FROM closeoutsale WHERE temp_price = :saleprice :saleprice_null;你可以使用下面语句来完成上述功能: if (saleprice_null = -1) EXEC SQL DELETE FROM closeoutsale WHERE temp_price IS null;
22、else EXEC SQL DELETE FROM closeoutsale WHERE temp_price = :saleprice; 为了便于识别主变量,当嵌入式SQL语句中出现主变量时,必须在变量名称前标上冒号(:)。冒号的作用是,告诉预编译器,这是个主变量而不是表名或列名。2 数据的查询和修改 可以使用SELECT INTO语句查询数据,并将数据存放在主变量中。如上例中的: EXEC SQL SELECT au_fname INTO :first_name from authors where au_lname = :last_name; 使用DELETE语句删除数据。其语法类似于T
23、ransact-SQL中的DELETE语法。如:EXEC SQL DELETE FROM authors WHERE au_lname = White 使用UPDATE语句可以更新数据。其语法就是Transact-SQL中的UPDATE语法。如:EXEC SQL UPDATE authors SET au_fname = Fred WHERE au_lname = White 使用INSERT语句可以插入新数据。其语法就是Transact-SQL中的INSERT语法。如:EXEC SQL INSERT INTO homesales (seller_name, sale_price) real_
24、estate(Jane Doe, 180000.00); 多行数据的查询和修改请参见下一节游标。3 游标的使用用嵌入式SQL语句查询数据分成两类情况。一类是单行结果,一类是多行结果。对于单行结果,可以使用SELECT INTO语句;对于多行结果,你必须使用cursor(游标)来完成。游标(Cursor)是一个与SELECT语句相关联的符号名,它使用户可逐行访问由SQL Server返回的结果集。先请看下面这个例子,这个例子的作用是逐行打印staff表的id、name、dept、 job、years、salary和comm的值。EXEC SQL DECLARE C1 CURSOR FOR SEL
25、ECT id, name, dept, job, years, salary, comm FROM staff;EXEC SQL OPEN c1;while (SQLCODE = 0) /* SQLCODE will be zero if data is successfully fetched */ EXEC SQL FETCH c1 INTO :id, :name, :dept, :job, :years, :salary, :comm; if (SQLCODE = 0) printf(%4d %12s %10d %10s %2d %8d %8d, id, name, dept, job,
26、 years, salary, comm);EXEC SQL CLOSE c1;从上例看出,你首先应该定义游标结果集,即定义该游标的SELECT语句返回的行的集合。然后,使用FETCH语句逐行处理。值得注意的是,嵌入SQL语句中的游标定义选项同Transact-SQL 中的游标定义选项有些不同。必须遵循嵌入SQL语句中的游标定义选项。1)、声明游标:如:EXEC SQL DECLARE C1 CURSOR FOR SELECT id, name, dept, job, years, salary, comm FROM staff;2)、打开游标如:EXEC SQL OPEN c1;完整语法为:
27、OPEN 游标名 USING 主变量名 | DESCRIPTOR 描述名。关于动态OPEN游标的描述见第四节。3)、取一行值如:EXEC SQL FETCH c1 INTO :id, :name, :dept, :job, :years, :salary, :comm;关于动态FETCH语句见第四节。4)、关闭游标如:EXEC SQL CLOSE c1;关闭游标的同时,会释放由游标添加的锁和放弃未处理的数据。在关闭游标前,该游标必须已经声明和打开。另外,程序终止时,系统会自动关闭所有打开的游标。也可以使用UPDATE语句和DELETE语句来更新或删除由游标选择的当前行。使用DELETE语句删除
28、当前游标所在的行数据的具体语法如下:DELETE FROM table_name | view_name WHERE CURRENT OF cursor_name其中,l table_name是表名,该表必须是DECLARE CURSOR中SELECT语句中的表。l view_name是视图名,该视图必须是DECLARE CURSOR中SELECT语句中的视图。l cursor_name是游标名。 请看下面这个例子,逐行显示firstname和lastname,询问用户是否删除该信息,如果回答“是”,那么删除当前行的数据。EXEC SQL DECLARE c1 CURSOR FOR SELEC
29、T au_fname, au_lname FROM authors FOR BROWSE;EXEC SQL OPEN c1;while (SQLCODE = 0) EXEC SQL FETCH c1 INTO :fname, :lname; if (SQLCODE = 0) printf(%12s %12sn, fname, lname); printf(Delete? ); scanf(%c, &reply); if (reply = y) EXEC SQL DELETE FROM authors WHERE CURRENT OF c1; printf(delete sqlcode= %dn
30、, SQLCODE(ca); 4 SQLCA DBMS是通过SQLCA(SQL通信区)向应用程序报告运行错误信息(见3.4中的例子)。SQLCA是一个含有错误变量和状态指示符的数据结构。通过检查SQLCA,应用程序能够检查出嵌入式SQL语句是否成功,并根据成功与否决定是否继续往下执行。预编译器自动在嵌入SQL语句中包含SQLCA数据结构(见第二节的例子demo.c)。在程序中可以使用EXEC SQL INCLUDE SQLCA,目的是告诉SQL预编译程序在该程序中包含一个SQL通信区。也可以不写,系统会自动加上SQLCA结构。1)、SQLCODE SQLCA结构中最重要的部分是SQLCODE变
31、量。在执行每条嵌入式SQL语句时,DBMS在SQLCA中设置变量SQLCODE值,以指明语句的完成状态:1、0 该语句成功执行,无任何错误或报警。2、0 出现了报警信息。2)、SQLSTATESQLSTATE变量也是SQLCA结构中的成员。它同SQLCODE一样,都是返回错误信息。SQLSTATE是在SQLCODE之后产生的。这是因为,在制定SQL2标准之前,各个数据库厂商都采用SQLCODE变量来报告嵌入式SQL语句中的错误状态。但是,各个厂商没有采用标准的错误描述信息和错误值来报告相同的错误状态。所以,标准化组织增加了SQLSTATE变量,规定了通过SQLSTATE变量报告错误状态和各个错
32、误代码。因此,目前使用SQLCODE的程序仍然有效,但也可用标准的SQLSTATE错误代码编写新程序。5 DB2的嵌入SQL程序处理过程嵌入SQL程序处理,由一个源程序创建为一个可执行文件的过程。 首先对源文件做预编译(precompiler),生成两个部分文件:一部分是纯的C程序源文件,它们和其他的C程序源文件一起,经过编译和连接生成可执行的程序(executable program),而另一部分是bind文件或package文件。Bind文件经过binder操作以后,也生成为package文件。所谓package,实际上是SQL语句的访问计划。所以,预编译器将源程序中的SQL语句提出来,生
33、成他们的访问计划,并将访问计划存放在数据库管理器中。当执行程序并遇到访问数据库的命令时,它将到数据库管理器中寻找属于它的访问计划,然后按照访问计划中所设计的方法对数据库进行访问。第一步、预编译 源程序生成以后,在源程序中嵌入了许多SQL语句,而SQL语句是宿主语言编译器所不认识的,所以在用宿主语言编译器进行编译、连接之前必须将SQL语句分离出来,这就是预编译所做的工作。DB2中预编译操作是通过PREP命令执行的,PREP命令首先将源程序中的所有有关SQL语句全部注释起来,对它进行分析和语法检查。如果源程序中的SQL语句全部书写正确,则将这些SQL语句转换成C语言可以识别的一系列的API函数。这
34、些函数可以在函数执行时访问数据库,然后将源文件中所有用于生成数据库管理器的PACKAGE的数据提出组合成一个BIND文件。也可以直接生成一个PACKAGE,但这相当于在预编译后又执行了一次BIND操作。在预编译时,对整个源程序文件中的所有变量做统一处理而不根据变量的生命期来处理,所以宿主变量在整个程序中是唯一的。下面讲解预编译的步骤:1)、连接到一个数据库,该操作是为BIND做准备。操作如下:db2 connect to cicstest2)、执行预编译命令,假设源文件为adhoc.sqc,则:db2 prep adhoc.sqc bindfile下面我们对预编译的几种输出文件进行讨论。预编译
35、后生成的C语言源文件:该文件中原有的SQL语句,已经全部加上注释并转换成了C语言可以识别的API调用。BIND文件:如果在预编译时使用BINDFILE选项,则生成BIND文件,BIND文件的后缀为.bnd,BIND文件可以在将来使用BIND命令来生成PACKAGE。 db2 bind adhoc.bnd如果在预编译时,只生成BIND文件,那么即使在预编译时,不能访问某些数据库对象,系统也只是报警,而不会报错。如果使用PACKAGE选项,则生成PACKAGE。如果有MESSAGE选项,则生成信息文件,它包含了所有的返回信息,如:警报、错误等。它便于程序员对源程序做进一步的修改。第二步、编译和连接
36、在预编译后,程序中只有C语言语句,它们都可以为C语言的编译器所识别。所以,可以按照一般的方法进行编译和连接,但在将SQL语句转换以后,在C语言程序中,又引入了许多一般的C语言系统所没有的INCLUDE文件和函数库,这些均在DB2的SDK中。所以,要生成可执行的程序,就必须安装DB2的SDK,并且做以下设置:set INCLUDE=$(DB2PATH)include;%include%set LIB=$(DB2PATH)lib;%LIB%下面是编译和连接:cl -o adhoc.exe adhoc.c生成的可执行文件必须与数据库管理器中的PACKAGE相结合,才能执行。BINDPACKAGE是D
37、B2为SQL语句制定的访问计划。通过precompile之后,源程序中的SQL语句部分就被分离出来。PACKAGE就是根据具体的SQL语句和数据库中的信息生成的针对每条SQL语句的访问计划,它存放在DB2数据库服务器上。应用程序执行到SQL语句时,就到相应的服务器上去找它们的PACKAGE,数据库服务器根据PACKAGE执行具体的数据库操作。所以,如果一个应用程序访问了多个数据库服务器,则该应用程序应在它访问到的数据库服务器上均生成相应的PACKAGE。因此,当遇到这种情况时,推荐的方式是将源程序分成若干个文件,每个文件只访问一个服务器,然后分别进行预编译。执行PREP命令时,加上选项PACK
38、AGE或不注明BINDFILE、SYNTAX或SQLFLAG选项,这时BIND操作将自动进行。直接使用BIND命令从BIND文件中生成PACKAGE存放在数据库管理器中。BIND完成的功能是,从数据库中找到SQL语句所涉及的表,查看SQL语句中提到的表名及属性是否与数据库中的表名和属性相匹配,以及应用程序开发者是否有权限查询或修改应用程序中所涉及到的表及属性。这就是为什么在预编译之前要连接到相应的数据库上的原因。在做BIND操作后,在数据库管理器中就生成一个PACKAGE,PACKAGE的名字与源程序的文件名字相同。一个源文件在数据库中可有多个PACKAGE存在。为了区分不同的PACKAGE,
39、DB2中引入了时间戳的概念。在PREP执行时,系统对生成的修改过的C语言程序和BIND文件以及PACKAGE中都加入了一个时间戳。BIND文件在生成PACKAGE时也将时间戳传递下来,修改过的C语言程序在生成可执行程序时,同样也将时间戳传递下去。当应用程序运行时,可执行程序是通过时间戳找到相应的PACKAGE,如果时间戳不匹配,则说明版本更新,需要做BIND。6 事务所谓事务,就是一系列应用程序和数据库之间交互操作的集合。一旦一个事务开始执行,则事务中的操作要么全部执行,要么全部不执行。事务开始:DB2事务是隐式开始的,除了下列的一些语句,其他任何一个可执行的SQL语句都隐式地开始一个事务。
40、BEGIN DECLARE SECTION END DECLARE SECTION DECLARE CURSOR INCLUDE SQLCA INCLUDE SQLDA WHENEVER事务结束:事务由一个可执行的SQL语句开始,后面执行的所有SQL语句都将属于同一个事务,该事务一直遇到COMMIT或ROLLBACK命令时才结束。COMMIT操作的作用是,结束当前的事务,事务对数据库所做的修改永久化。ROLLBACK的作用是,结束当前的事务,将被修改的数据恢复到事务执行以前的状态,即取消事务执行产生的影响。当程序结束时,系统自动隐式地执行COMMIT操作,如果系统检测到死锁等故障,则隐式地执行
41、ROLLBACK操作。CICS CLIENT调用通用流程(最简)和调用方法:EasyCics提供以下支持文件供开发者使用:ec.h(C语言头文件)ec.cec.umk(for UNIX)或ec.nmk(for NT)由此编译生成:ec.o(for UNIX),或ec.obj(for NT)ecx.h(C+语言头文件)ecx.cecx.umk(for UNIX)或ecx.nmk(for NT)由此编译生成:ecx.o(for UNIX),或ecx.obj(for NT)EasyCICS Client OLE安装程序,安装生成EcOle.dll。安装注意事项:确保安装CICS客户程序之后再安装Ea
42、syCICS。对Win9x/NT客户,应重新启动机器,以保证在PATH环境变量中含有CICS客户程序的执行目录。对WIN9X客户,有时需要增加环境变量的内存空间,办法是在c:config.sys文件中加入以下一行内容:SHELL=c: c: /E:2048 /P 声明EasyCics.App组件接口 调用ConnectServer接口函数 调用BeginWrite接口函数 使用SetValue接口函数设置输入的条件(可以) 调用CallProgramAndCommit接口函数使用GetValue接口函数或RsOpen接口函数得到输出的结果说明:CICS SERVER端程序的作用类似于DLL,C
43、ICS接口就是如何调用DLL; 使用C函数库和头文件以下是使用C开发EasyCICS的要点:1. EasyCics通过Ec.h和Ec.c文件提供访问EasyCics Client C API的支持。2. 在C源文件加入以下声明:#include ec.h3. 连接时加入Ec.c生成的目标文件。#include ec.hint get_custinfo(char * custid)int r;char sum_str20;r=ConnectServer(CICS01,TEST,TEST);if(r!=0)return(0);SetValue(CUSTNO,custid);SetValue(DATE,date);CallProgramAndCommit(SELCUS);GetValue(CUNAME, custname);GetValue(CUIDEN, iden);GetValue(SUM, sum_str);sum=atof(sum_str);return(1);int get_spinfo(char *txm)int r;char price_str200,kcl_str200,result20;/* r=ConnectServer(CICS01,TEST,TEST);i
限制150内