首页 新闻 搜索 专区 学院

奇怪了。。为什么Oracle事务不起作用???

0
悬赏园豆:10 [已解决问题] 解决于 2014-08-01 11:40

我的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;
        }
hexllo的主页 hexllo | 菜鸟二级 | 园豆:368
提问于:2014-08-01 11:22
< >
分享
最佳答案
0

res = db.ExecuteNonQuery(cmd)

这句有问题。

这就跟你有一个快件,想让顺丰帮你寄给朋友,也找了顺丰,填了快递单。

然后这时候,你直接开车把快件送去给朋友了,把顺丰快递小哥直接晾在那儿了...

收获园豆:10
爱编程的大叔 | 高人七级 |园豆:30753 | 2014-08-01 11:25

谢谢,但那只是统计数据条数。。我在事务中插入一条数据后,用PLSQL马上就能查到,还没提交事务呢。。另外,我将网线拔了,报异常。。到catch里,插上网线rollback,结果刚刚那条数据还在。。

 

请问这是怎么回事呢?谢谢!

hexllo | 园豆:368 (菜鸟二级) | 2014-08-01 11:30

@hexllo: 

晕,你直接没看懂我的意思。你这个操作跟事务一点关系都没有。

就是说你那个快件出了问题,你想收回,打电话给顺丰是没有用的。

你自己去找朋友收回吧。

爱编程的大叔 | 园豆:30753 (高人七级) | 2014-08-01 11:33

@爱编程的大叔: 把db.ExecuteNonQuery(cmd);

换成db.ExecuteNonQuery(cmd,trans);

成功解决。

hexllo | 园豆:368 (菜鸟二级) | 2014-08-01 11:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册