首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

存储过程插入重复键异常为何未能捕获

2013-08-09 
求助:存储过程插入重复键错误为何未能捕获各位高手,我在delphi中用ado执行存储过程,代码简化如下:trycon1.

求助:存储过程插入重复键错误为何未能捕获
各位高手,我在delphi中用ado执行存储过程,代码简化如下:
  try
  con1.BeginTrans;
  aq1.SQL.Text:='exec test';
  aq1.ExecSQL;
  con1.CommitTrans;
  ShowMessage('成功!');
  except
  ShowMessage('错误!');
  con1.RollbackTrans;
  end;

存储过程如下:
CREATE PROCEDURE test AS
SET XACT_ABORT ON 
update duowdkc set kucsl=kucsl+10
insert into yewdj(danjbh) values ('JHD001201307300011')

现在的问题是,该存储过程中第一句执行成功,第二句失败,因为插入了重复键导致回滚了。
那么在我的delphi里,是捕获不到回滚的,程序依然显示“成功”。
另外,如果我把第一句去掉,只留第二句,那么错误就捕获到了。
到底应该怎么办?是存储过程的问题还是delphi的问题,我需要改哪里?


[解决办法]
  追问一下,应该避免出现键号值重复的情况。
  而且应该是在提交之间预先就判断的,而不是在保存时才发现报错。
  可以通过一个存储过程求不重复的键值。存储过程内,用事务提交和回滚,来控制并发读取。

热点排行