C#实现执行数据库事务案例
我是实际项目来拆出来做的案例,场景是比如我们在做电商网站时,在创建订单时的一系列操作,通常在创建订单时我们需要数据表的操作有:订单的表头(主表)、订单的详细、清空购物车、甚至是修改优惠劵的状态(在使用了优惠劵的时候),下面直接把执行事务的主方法直接贴出来:
public static bool CreateUserOrder(UserOrder model, string Ids)
{
List<string> SQLStringList = new List<string>();
List<DbParameter[]> Parameters = new List<DbParameter[]>();
StringBuilder strSql = new StringBuilder(); //添加OrderInfor
SqlParameter[] parameters1 = OrderInforDAL.BuildOrderInforAddParameter(model.UserId, model.OrderCode, Ids, ref strSql);
SQLStringList.Add(strSql.ToString());
Parameters.Add(parameters1); //添加UserOrder
SqlParameter[] parameters2 = BuildUserOrderAddParameter(model, ref strSql);
SQLStringList.Add(strSql.ToString());
Parameters.Add(parameters2); //清空购物车
SqlParameter[] parameters3 = BasketDetailDAL.BuildUpdateParameter(true, Ids, ref strSql);
SQLStringList.Add(strSql.ToString());
Parameters.Add(parameters3); //修改优惠劵状态
if (model.CouponId > )
{
SqlParameter[] parameters4 = CouponDAL.BuildUpdateParameter(model.CouponId, , model.OrderCode, ref strSql);
SQLStringList.Add(strSql.ToString());
Parameters.Add(parameters4);
} return access.ExecuteSqlTran(SQLStringList, Parameters, true);
}
接下来贴出两个个详细的方法作参考:
internal static SqlParameter[] BuildOrderInforAddParameter(int UserId, string OrderCode, string Ids, ref StringBuilder strSql)
{
strSql = new StringBuilder();
strSql.Append("INSERT INTO OrderInfor(");
strSql.Append("UserId,X_ProId,X_ProName,StockNum,BuyNum,UnitPrice,OrderCode,TotalPrice,IsOther)");
strSql.Append(" select UserId,X_ProId,X_ProName,StockNum,BuyNum,UnitPrice,@OrderCode,TotalPrice,IsOther from BasketDetail");
strSql.AppendFormat(" where UserId=@UserId and IsSubmit='false' and IsInquiry=2 and IsExpired=0 and BasketDetailId in ({0})", Ids);
SqlParameter[] parameters = {
new SqlParameter("@OrderCode", SqlDbType.NVarChar,),
new SqlParameter("@UserId", SqlDbType.Int)
};
parameters[].Value = OrderCode;
parameters[].Value = UserId;
return parameters;
}
internal static SqlParameter[] BuildUpdateParameter(int CouponId, int State, string OrderCode, ref StringBuilder strSql)
{
strSql = new StringBuilder();
strSql.Append("update Coupon set");
strSql.Append(" [State]=@State,OrderCode=@OrderCode");
strSql.AppendFormat(" where ID={0}", CouponId);
SqlParameter[] parameters = {
new SqlParameter("@State", SqlDbType.Int),
new SqlParameter("@OrderCode", SqlDbType.NVarChar,)
};
parameters[].Value = State;
parameters[].Value = OrderCode;
return parameters;
}
C#实现执行数据库事务案例的更多相关文章
- PHP 操作 MySQL 执行数据库事务
<?php $mysqli=new mysqli();//实例化mysqli $mysqli->connect('localhost','root','admin','test'); if ...
- ACID:数据库事务正确执行的四个基本要素
ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...
- ACID数据库事务正确执行的四个基本要素的缩写
ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...
- C#实现执行多条SQl语句,实现数据库事务
C#实现执行多条SQl语句,实现数据库事务 在数据库中使用事务的好处,相信大家都有听过银行存款的交易作为事务的一个例子.事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的 ...
- acid数据库事务正确执行的四个基本要素的缩写编辑本义项
ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...
- 执行多条SQL语句,实现数据库事务(不可传入Sql参数)
执行多条SQL语句,实现数据库事务(不可传入Sql参数) http://blog.csdn.net/hanxuemin12345/article/details/9980371
- acid(数据库事务正确执行的四个基本要素的缩写)
ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...
- C# 执行多条SQL更新语句,实现数据库事务
class Program { class Result<T> { public T data; public string Message; public bool Success; p ...
- acid (数据库事务正确执行的四个基本要素的缩写)
ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ...
随机推荐
- java异常处理及自定义异常的使用
1. 异常介绍 异常机制可以提高程序的健壮性和容错性. Throwable:Throwable是java语言所有错误或异常的超类. 有两个子类Error和Exception. 1.1 编译期异常 编译 ...
- 团队作业4——第一次项目冲刺(Alpha版本)2017.11.16
1.当天站立式会议照片 本次会议在5号公寓3楼召开,本次会议内容:①:熟悉每个人想做的模块.②:根据老师的要求将项目划分成一系列小任务.③:在上次会议内容完成的基础上增加新的任务. 2.每个人的工作 ...
- 08_Java基础语法_第8天(Eclipse)_讲义
今日内容介绍 1.Eclipse开发工具 2.超市库存管理系统 01Eclipse的下载安装 * A: Eclipse的下载安装 * a: 下载 * http://www.eclipse.org ...
- oracle greatest(),least( ) ,coalesce()
--场景1: select pt, greatest(wm), least(wm) from (select s.producttype pt, wm_concat(s.productid) wm f ...
- ubuntu下安装lamp环境
使用普通用户来安装lamp环境: 1.安装apache: sudo apt-get install apache2
- 微信小程序 功能函数 定时震动
ffn: function () { let nnn = this.data.nnn nnn += 1; this.setData({ nnn: nnn }); if (nnn > 10) { ...
- SQL语句查询一个数据库中的所有表
--读取库中的所有表名 select name from sysobjects where xtype='u' --读取指定表的所有列名 select name from syscolumns whe ...
- [OS] Linux进程、线程通信方式总结
转自:http://blog.sina.com.cn/s/blog_64b9c6850100ub80.html Linux系统中的进程通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程 ...
- MySQL-常见数据拆分办法
在生产环境中,由于业务的增长或者业务的拆分,DBA经常需要拆库操作.那么我们常见的拆库手段有哪些呢? 我这里提供几种解决办法: 1. 使用mysqldump 把表逻辑倒出,然后再source 到其它地 ...
- idea的protobuf使用
1.安装插件 2.添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...