本文共 1000 字,大约阅读时间需要 3 分钟。
为了实现数据的统一管理,防止出现唯一号重复的情况,我个人认为最有效的方法莫过于使用Sequence(我使用的是Oracle),为了实现自动增长还可以创建一个触发器,让触发器自动取出Sequence的Nextval填入Id中.这个时候,数据窗口可以不提取主键字段,直接更新就可以生成数据,参考触发器如下:
CREATE OR REPLACE TRIGGER SUMMARY_LIST_BIR
BEFORE INSERTON SUMMARY_LISTREFERENCING OLD AS OLD NEW AS NEWFOR EACH ROWwhen (NEW.SUMMARY_LIST IS NULL)BEGIN select SEQ_SUMMARY_LIST.nextVal INTO :NEW.SUMMARY_LIST from dual;END;
注:这个触发器是在ID为空的情况下才触发.
但是,可能有这样一种情况,那就是比如部门和人员是1对多的情况,如果要同时增加部门和人员的情况是,由于开始还没有生成部门编号,这样人员自然就没有办法直接对找到部门中去,常规的办法可以用ADO.net通过SQL语句提取数据,但是那样比较麻烦,我们现在用了Datawindow的情况下能不能使用数据窗口来提取呢?
答案是肯定的,事实上也非常简单,你可以创建一个数据窗口,然后通过语法的方式写入查询语句,如:
select seq_summary_list.nextval from dual
然后保存该数据窗口,提取数据的时候怎么提取呢?
可以使用Datastore,例子代码如下:
//提取编号 Sybase.DataWindow.DataStore ds_seq = new Sybase.DataWindow.DataStore(); ds_seq.LibraryList = Server.MapPath("../..") + @"/pbl/summary.pbl"; ds_seq.DataWindowObject = "d_work_summary_seq_nextval"; ds_seq.SetTransaction(trans.SQLCA); ds_seq.Retrieve();int iSummaryID = (int)ds_seq.GetItemDecimal(1, 1);
转载地址:http://ywwni.baihongyu.com/