主表table,有个字段为 idd
明细表1:table1 有个字段为 idd
明细表2:table2 有个字段为 idd
明细表3:table3 有个字段为 idd
明细表4:table4 有个字段为 idd
明细表5:table5 有个字段为 idd
明细表6:table6 有个字段为 idd
明细表7:table7 有个字段为 idd我想实现主表table插入一条记录, 把刚插入的这条记录的idd 值同时插入到 table1到 table100中,只有当所有数据全部插入完成后才提交数据,如何个做法?table 有好多用户在同时插入数据,这种功能应如何实现?
明细表1:table1 有个字段为 idd
明细表2:table2 有个字段为 idd
明细表3:table3 有个字段为 idd
明细表4:table4 有个字段为 idd
明细表5:table5 有个字段为 idd
明细表6:table6 有个字段为 idd
明细表7:table7 有个字段为 idd我想实现主表table插入一条记录, 把刚插入的这条记录的idd 值同时插入到 table1到 table100中,只有当所有数据全部插入完成后才提交数据,如何个做法?table 有好多用户在同时插入数据,这种功能应如何实现?
用存储过程,全部执行完毕后,在Commit.出现异常,就RollBack.
OracleConnection con = dbclass.GetOracleConnection();
OracleCommand com = new OracleCommand(); //用事务对数据进行多表插入
com.Connection = con;
com.Transaction = con.BeginTransaction();
try
{
//.....要插入的方法语句 com.Transaction.Commit();
return true;
}
catch (Exception ee)
{
com.Transaction.Rollback(); string error = ee.Message.Replace("'", " ");
return false;
}
(取刚插入的自增id用SCOPE_IDENTITY())
没什么难的,如果你愿意用sp来搞,则一个sp就可搞定.
create proc test
as
begin
BEGIN TRAN
declare @id int
insert into tableP (t_name,...) values('xxxx',...)
set @id = SCOPE_IDENTITY()--取得刚插入的主表id
IF @@ERROR<>0 GOTO ERRORinsert into table1 (idd,...) values(@id,...)
IF @@ERROR<>0 GOTO ERROR--........省略,我就不写了,后边接着插你的从表.COMMIT TRAN
returnERROR:
ROLLBACK TRAN
RETURN
end
BEGIN DISTRIBUTED TRANSACTION tran
--过程IF @@ERROR<>0
GOTO _hdlError COMMIT TRANSACTION tran_hdlError:
IF @@ERROR<>0
BEGIN
ROLLBACK TRANSACTION tran
SET @msg='新增数据发生错误。Error ID:'+rtrim(str(@@ERROR))
END SELECT @msg
一个conn 创建的事务,然后绑定两个commandText 如果成功就Summit,否则级是Roolback()