sql事务处理
- /// <summary>
- /// 启用事务提交多条带参数的SQL语句
- /// </summary>
- /// <param name="mainSql">主表SQL</param>
- /// <param name="mainParam">主表对应的参数</param>
- /// <param name="detailSql">明细表SQL语句</param>
- /// <param name="detailParam">明细表对应的参数</param>
- /// <returns>返回事务是否成功</returns>
- public static bool UpdateByTran(string mainSql, SqlParameter[] mainParam, string detailSql, List<SqlParameter[]> detailParam)
- {
- SqlConnection conn = new SqlConnection(connString);
- SqlCommand cmd = new SqlCommand();
- cmd.Connection = conn;
- try
- {
- conn.Open();
- cmd.Transaction = conn.BeginTransaction();//开启事务
- if (mainSql != null && mainSql.Length != 0)
- {
- cmd.CommandText = mainSql;
- cmd.Parameters.AddRange(mainParam);
- cmd.ExecuteNonQuery();
- }
- foreach (SqlParameter[] param in detailParam)
- {
- cmd.CommandText = detailSql;
- cmd.Parameters.Clear();
- cmd.Parameters.AddRange(param);
- cmd.ExecuteNonQuery();
- }
- cmd.Transaction.Commit();//提交事务
- return true;
- }
- catch (Exception ex)
- {
- if (cmd.Transaction != null)
- {
- cmd.Transaction.Rollback();//回滚事务
- }
- //将异常信息写入日志
- string errorInfo = "调用UpdateByTran(string mainSql, SqlParameter[] mainParam,string detailSql ,List <SqlParameter []>detailParam)方法时发生错误,具体信息:" + ex.Message;
- WriteLog(errorInfo);
- throw ex;
- }
- finally
- {
- if (cmd.Transaction != null)
- {
- cmd.Transaction = null;//清空事务
- }
- conn.Close();
- }
- }
C#中使用
- //读者借书
- public bool AddBorrowInfo(BorrowInfo objBorrowInfo)
- {
- //主表实现
- string sqlMain = "insert into BorrowInfo(BorrowId, ReaderId, BorrowDate, AdminName_B)values(@BorrowId, @ReaderId, @BorrowDate, @AdminName_B) ";
- SqlParameter[] param = new SqlParameter[]{
- new SqlParameter ("@BorrowId",objBorrowInfo .BorrowId ),
- new SqlParameter ("@ReaderId",objBorrowInfo .ReaderId ),
- new SqlParameter ("@BorrowDate",objBorrowInfo .BorrowDate ),
- new SqlParameter ("@AdminName_B",objBorrowInfo .AdminName_B )
- };
- //副表实现
- string sqlDetail = "insert into BorrowDetail(BorrowId, BookId, BorrowCount, NonReturnCount, Expire)values(@BorrowId, @BookId, @BorrowCount, @NonReturnCount, @Expire)";
- List<BorrowDetail> detailList = objBorrowInfo.DetailList;
- List<SqlParameter[]> paramList = new List<SqlParameter[]>();
- SqlParameter[] paramt = null;
- foreach (BorrowDetail item in detailList)
- {
- paramt = new SqlParameter[]{
- new SqlParameter ("@BorrowId",item.BorrowId ),
- new SqlParameter ("@BookId",item.BookId ),
- new SqlParameter ("@BorrowCount",item.BorrowCount ),
- new SqlParameter ("@NonReturnCount",item.NonReturnCount ),
- new SqlParameter ("@Expire",item.Expire )
- };
- paramList.Add(paramt);
- }
- //添加借书
- return SQLHelper.UpdateByTran(sqlMain, param, sqlDetail, paramList);
- }