我的BaseDAO是用微软企业库来完成的,用的是Oracle,普通的增删查改没问题。。
但是发现事务不起作用,我C#代码如下,请高手们帮忙看看是哪错了?谢谢!
/// <summary> /// 在同一任务中插入多条记录 /// </summary> /// <param name="p">实体父类集合</param> /// <returns></returns> protected bool TranInsert(List<Parent> listP) { int res = 0; using (DbConnection con = db.CreateConnection()) { con.Open(); DbTransaction trans = con.BeginTransaction(); try { foreach (Parent p in listP) { Hashtable ht = p.MappingTableInfo(); if (p.CountFields() > 0) { string table = ht[Constant.STR_DB_TABLE].ToString(); string key = GetFields(p, DB_Condition.Key); string value = GetFields(p, DB_Condition.Value); string cmdText = string.Format("INSERT INTO {0}({1}) VALUES({2})", table, key, value); DbCommand cmd = AddArgsReturnCMD(p, cmdText); res = db.ExecuteNonQuery(cmd); ++res; } } trans.Commit(); } catch (Exception ex) { trans.Rollback(); res = -1; Utility.Logger.Error("插入数据时发生错误:" + ex.Message); } } return res == listP.Count; }
res = db.ExecuteNonQuery(cmd)
这句有问题。
这就跟你有一个快件,想让顺丰帮你寄给朋友,也找了顺丰,填了快递单。
然后这时候,你直接开车把快件送去给朋友了,把顺丰快递小哥直接晾在那儿了...
谢谢,但那只是统计数据条数。。我在事务中插入一条数据后,用PLSQL马上就能查到,还没提交事务呢。。另外,我将网线拔了,报异常。。到catch里,插上网线rollback,结果刚刚那条数据还在。。
请问这是怎么回事呢?谢谢!
@hexllo:
晕,你直接没看懂我的意思。你这个操作跟事务一点关系都没有。
就是说你那个快件出了问题,你想收回,打电话给顺丰是没有用的。
你自己去找朋友收回吧。
@爱编程的大叔: 把db.ExecuteNonQuery(cmd);
换成db.ExecuteNonQuery(cmd,trans);
成功解决。