c#中数据库的事务操作

在用C#进行开发的时候,我们会经常用到数据库。有时候需要对数据库多个表进行操作,但是如果我们的命令有问题,其中有部分表的内容变更而其他表的内容却还是保持原样,这样就会导致数据库数据表的冲突,对我们业务功能造成重大影响。

举个栗子,某网页游戏后台有两个表,分别记录玩家的充值记录和玩家权限表格。有玩家充值了,想要获得更高的游戏权限,然而后端程序对数据库操作只有充值记录成功了,而玩家权限表格更新失败。这样导致玩家充值却得不到应有的权限,网页游戏的流量飞速流失。

这个时候,数据库事务操作能够帮助我们解决该问题。

什么是数据库事务

数据库事务是指作为单个逻辑工作单元执行的一系列操作。简单来说,用数据库事务相当于把数据库操作捆绑执行,只要其中一条sql语句失败,直接返回,不进行数据库操作,只有全部执行正确,才会更新数据库。

数据库事务有四个特性,
第一原子性,事务具有独立的不能被拆分的,不能只做部分,事务的性质是要么全做,要么都不做。                                       第二统一性,在事务执行之前和事务执行之后的数据是一致。                                       
第三隔离性,事务是独立的,开发者不能查看中间状态。对同一张表同一时间最多只能有一个事务处理。
第四永久性,事务的发生对数据库的影响是永久的。

如何数据库事务

使用数据库事务主要有两句命令

1.创建事务对象。 SqlTransanction trans = conn.BeginTransaction(); //注意必须是数据库连接打开后编写

2.把事务对象挂到命令对象上,让命令执行带有事务的功能。 cmd.Transaction = trans;

接下去可以按照普通使用数据库命令那样操作数据库了,

a.成功后调用事务对象的Commit()方法来提交执行的结果。

b.失败后调用事务对象的Rollback()方法来回滚执行前的状态。

下面举个具体应用栗子:

 public bool StartTrans(List<String> sqls)//sqls:一系列打算绑定执行的sql语句
        {
            using (SqlConnection conn=new SqlConnection(constr))//constr:数据库连接配置
            {
                con.Open();
                //开启事务
                SqlTransaction trans = conn.BeginTransaction();
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;//添加连接工具
                cmd.Transaction = trans;//添加事务
                try
                {
                    for (int i = 0; i < sqls.Count; i++)
                    {
                        string sql=sqls[i].ToString();//获取sql语句
                        cmd.CommandText = sql;//添加sql语句
                        cmd.ExecuteNonQuery();//执行
                    }
                    trans.Commit();//执行完成之后提交
                    return true;
                }
                catch(Exception e)
                {
                    //执行sql语句失败,事务回滚
                    trans.Rollback();
                    return false;
                }
                finally
                {
                    conn.Close();
                }
            }
        }

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#使用Dapper进行事务批量操作,可以按照以下步骤进行: 1. 开启事务:使用Dapper的Transaction属性可以开启事务。 ``` using (var cn = new SqlConnection(connectionString)) { cn.Open(); using (var transaction = cn.BeginTransaction()) { try { // 执行批量操作 transaction.Commit(); } catch { transaction.Rollback(); throw; } } } ``` 2. 执行批量操作:使用Dapper的Execute方法可以执行批量操作。 ``` using (var cn = new SqlConnection(connectionString)) { cn.Open(); using (var transaction = cn.BeginTransaction()) { try { string sql = "INSERT INTO MyTable (Column1, Column2) VALUES (@Column1, @Column2)"; List<MyData> data = new List<MyData>(); // 添加数据到data列表 cn.Execute(sql, data, transaction); transaction.Commit(); } catch { transaction.Rollback(); throw; } } } ``` 其,MyData是一个自定义的数据模型,包含要插入到数据库的数据。 3. 使用SqlBulkCopy进行批量操作:Dapper也支持使用SqlBulkCopy进行批量操作,可以提高批量操作的效率。 ``` using (var cn = new SqlConnection(connectionString)) { cn.Open(); using (var transaction = cn.BeginTransaction()) { try { using (var bulkCopy = new SqlBulkCopy(cn, SqlBulkCopyOptions.Default, transaction)) { bulkCopy.DestinationTableName = "MyTable"; DataTable table = new DataTable(); // 添加数据到table bulkCopy.WriteToServer(table); } transaction.Commit(); } catch { transaction.Rollback(); throw; } } } ``` 以上就是使用Dapper进行事务批量操作的基本步骤。需要注意的是,批量操作可能会影响数据库性能,应该在适当的时候进行优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值