您的位置:首页 > 数据库

数据库&事务处理及注意事项

2011-03-24 12:59 253 查看
public int AddMethod(PersInfoInfo enty, Tb_b_prsInfEntity entyTwo,string connZD) { SqlConnection con = new SqlConnection(this.conn); con.Open(); SqlTransaction st = con.BeginTransaction(); SqlConnection conTwo = new SqlConnection(connZD); conTwo.Open(); SqlTransaction stTwo = conTwo.BeginTransaction(); int flag = 0; try { string sql = "insert into tb_b_prsInf(prsNm,userNm,psw,dptCD,jibie,mangDep,telephone,Zhiwu,yufw)values(@prsNm,@userNm,@psw,@dptCD,@jibie,@mangDep,@telephone,@Zhiwu,@yufw)"; SqlParameter[] pr = new SqlParameter[9]; pr[0] = new SqlParameter("@prsNm", enty.prsNm); pr[1] = new SqlParameter("@userNm", enty.userNm); pr[2] = new SqlParameter("@psw", enty.psw); pr[3] = new SqlParameter("@dptCD", enty.dptCD); pr[4] = new SqlParameter("@jibie", enty.jibie); pr[5] = new SqlParameter("@mangDep", enty.mangDep); pr[6] = new SqlParameter("@telephone", enty.telephone); pr[7] = new SqlParameter("@Zhiwu", enty.Zhiwu); pr[8] = new SqlParameter("@yufw", enty.yufw); switch (enty.jibie) { case "SDZX": flag = AddSDZX(sql, pr, entyTwo, st, stTwo, enty); break; case "QX": flag = AddQX(sql, pr, entyTwo, st, stTwo, enty); break; default: flag = AddNew(sql, pr); break; } if (flag == 1) { st.Commit(); stTwo.Commit(); } else { st.Rollback(); stTwo.Rollback(); } } catch(Exception ex) { string err = ex.Message; st.Rollback(); stTwo.Rollback(); flag = -1; } finally { st.Dispose(); stTwo.Dispose(); con.Close(); conTwo.Close(); } return flag; }

注意:在我们应用事务的时候,可以将它以参数的形式传给其他方法中使用,但要注意的是,事务的定义和事物的控制要在一个模块中。并且不管事务最终是提交还是回滚,我们都在要finally中对事务进行资源释放以及数据库连接的关闭。这样才可以避免一个事务执行到rollback()或是commit()之前就退出而造成的其他资源或用户不能访问数据库资源的现象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息