三层架构中怎么实现事物处理,因为可能需要调用不同的DAL,这时就出现怎样用事物事务统一处理的问题,自己研究了下,有个代码不错,基本思想就是这样的 sqlhelper.cs增加事务处理代码 #region 事务创建处理 public static SqlTransaction BeginTransaction(string con) { SqlConnection connection = new SqlConnection(con); connection.Open(); SqlTransaction tran = connection.BeginTransaction(); return tran; } public static int TransExecuteNonQuery(string sqlconnectingstring,CommandType commandtype,string commandText,params SqlParameter[] commandParameters) { int returnVule; using(SqlTransaction tran = BeginTransaction(sqlconnectingstring)) { try { returnVule = ExecuteNonQuery( tran, commandtype, commandText, commandParameters); returnVule =1; tran.Commit(); } catch { returnVule =0; tran.Rollback(); } } return returnVule; } public static object TransExecuteScalar(string sqlconnectingstring, CommandType commandType, string commandText, params SqlParameter[] commandParameters) { object reval = null; using(SqlTransaction tran = BeginTransaction(sqlconnectingstring)) { try { reval = ExecuteScalar( tran, commandType, commandText, commandParameters); tran.Commit(); return reval; } catch { tran.Rollback(); return null; } } } #endregion 为了保证数据完整性,多个插入语句必须采用事务处理 //test.cs public bool Savexx(ZfJbXx zfjbxx,string cymj) { sql1="INSERT INTO tablename(Id,col1,col2) VALUES(@Id,@col1,@col2) update tablename2 set col=@col"; sql2="INSERT INTO tablename3(Id,col1,col2) VALUES(@Id,@col1,@col2)"; //参数设置(略) using(SqlTransaction tran = SqlHelper.BeginTransaction(SqlHelper.DBConnectionString)) { try { //SqlHelper.TransExecuteNonQuery(tran,CommandType.Text,sql1,parms); //SqlHelper.TransExecuteNonQuery(tran,CommandType.Text,sql2,parms); //更正为 SqlHelper.ExecuteNonQuery(tran,CommandType.Text,sql1,parms); SqlHelper.ExecuteNonQuery(tran,CommandType.Text,sql2,parms); tran.Commit(); return true; } catch { tran.Rollback(); return false; } }