打印本文 打印本文 关闭窗口 关闭窗口
Power Builder中的交易控制
作者:武汉SEO闵涛  文章来源:敏韬网  点击数613  更新时间:2009/4/22 23:09:17  文章录入:mintao  责任编辑:mintao

前言:基于Windows平台的数据库前端开发工具Power Builder自问世以来,由于其方便简洁的界面设计,以及丰富完善的对象支持,在国内外受到很多用户的欢迎.随着用户应用系统开发层次的提高,深入了解PowerBuilder设计思想,别是与外部数据库的联接口是相当必要的.专题就PB自身所设计的交易控制机制做以下深入的探讨:

一.通讯缓冲区.
二.建立通讯连接及参数约定.
三.交易控制机制.
四.Data Window SQL语句翻译.
五.应用示例. 

一.通讯缓冲区:

  PB软件通过通讯缓冲区与各数据库厂商的提供的网络Server通讯.默认的系统通讯缓冲区为SQlCA.因为PB4.0以下版本与Sybase接口由Sybase open client for window4.2平台开发,所以PB中通讯缓冲区实质为db_library中dbprocess结构扩展.PB除了利用通讯缓冲区自动替用户完成SQL语句翻译,装配,发送及Server返回结果暂存,数据类型匹配等工作外,还利用其在PB端完成对Server端交易的提交/回滚控制. 

  Sybase SQL Server system10可利用通讯缓冲区的11个属性,分三类:

a.连接类:DBMS,database,LogIn,LogPass,Servername,DBParm.
b.返回类:SQLcode,SQLNRows,SQLDBcode,SQLErrText.
c.交易类:Autocommit.

  一个通讯缓冲区同时只能用于和一个Server上不同数据库通讯.PB可通过定义另外的数据缓冲区完成同时对不同Server上数据的存取.Script片段如下: 

transaction T1 
T1=CREATE transaction 
Connect Using T1; 

二.建立通讯连接及参数约定: 

  PB通过Connect/disconnect[Usingtranobjectname]函数,根据tranobjectname所指的通讯缓冲区中连接类属性设置与Server进行连接/切断连接.连接成功后Server端使用sp_who可看到一条线索,及使用线索的PB应用程序通过Dbpram属性设置的应用信息.对于同一个通讯缓冲区发多个Connect命令,在Server端上产生一个线索.对于广域网上PB用户来说,建立连接时间较长,应避免频繁使用Connect/disconnect命令建立/断开连接.

  Autocommit系统参数设置PB每次向Server发送的交易请求是否自动提交.当其值为false(非自动提交)时PB在发出交易请求后可通过继续发送Commit 或 Rollback 命令对先前的交易进行提交/回滚控制.若Autocommit=True,则PB对已发出的交易无控制手段.Autocommit值可编程修改.应用中当用户需要自己控制交易时,应注意在交易发出后,尽快 地执行Commit/Rollback命令. 

  DBparm系统参数设置PB在与Server通讯时,双方通讯参数的约定.主要包括以下一些参数: 

AppName,Host通知ServerPB的应用程序名及PB所在机器名. 
Async(4.0) DBGettime(4.0)设置PB与Server采用异步通讯方式,以及Server端响应返回时间. 

三.交易控制机制: 

  PB所提供的交易控制手段有两种: 

1.内嵌SQL. 
2.Datawindow内存. 

  PB script语言中涉及交易控制的函数主要有4个: 

commit; 
rollback; 
settrans 
settransobject 

1.内嵌SQL: PB允许用户在script中嵌套基本的SQL数据操纵语言(DML),以及本地cursor操作.DML包括:select[Holdlock],update,delete,insert.如第二部分所述,当Autocommit=false时,PB在向Server发出内嵌SQL语句后,必须显式地发送Commit/Rollback命令才能真正地提交/回滚内嵌SQL所做的交易;同时PB通过通讯缓冲区(默认为SQLCA)的返回结果类属性sqlcode来表明已发出的内嵌SQL语句是否成功.SQLCode值有3种 :

0:成功 
100:成功无行返回 
-1:失败 

  若Autocommit=True,则PB虽然可以通过SQLCode显示内嵌SQL语句执行状态,但由于无法就该执行状态对交易进行再控制.本地Cursor操作实值上是先对Server端数据照快照,然后将生成的数据集合取到PB端,在PB端模拟实现关系型数据库的Cursor操作.当数据集合取到PB端后,PB不再对Server端数据加锁(Select with Hold lock除外). 

2.Datawindow对象: Datawindow 对象可以独立地提供建立/断掉Server连接,执行交易,控制交易提交/回滚等功能.与Server连接方面,其内部有一个独立的通讯缓冲区,DW负责将对DW操纵的script语句(retrieve, update)翻译成内嵌SQL语句.并结合Autocommit设置自动控制交易或提供PB近一步交易控制程序.在本地数据处理方面,DW提供三个数据缓冲区(primary,delect, insert)实现对DW自身数据管理. 

  下文侧重DW与Server连接近一步描述. 

  a.使用settran方式. 
  settran(transactionobjectname)函数将transactionobjectname所指的通讯缓冲区内容copy到DW自身的内部通迅缓冲区.当采用settran方式发retrieve或updata命令与Server通讯时,DW使用自己内部通讯缓冲区与Server通讯,自动执行commit/discommit操作.当交易失败时,DW自动回滚交易.settran方式与Autocommit参数设置无关.它相当于Autocommit=True的情况.当由于此方式下,DW每次交易时额外地进行commit/discommit操作广域网上,速度将会受到影响.

  b.使用settran object方式. 
  settran object(transactionobjectname)函数使得DW共享与transactionobjectname.所指数据缓冲区与Server通讯,DW不会自动地进行connect/disconnect.也不会自动进行Commit和Rollback以上操作均可编程控制.(to be continued...) 

打印本文 打印本文 关闭窗口 关闭窗口