首页 > 编程语言 >C# 事物控制

C# 事物控制

时间:2023-03-31 09:22:42浏览次数:38  
标签:控制 C# 事物 cmd Connection ex SqlConnection using

1.本地事物

即一个Connection并连接到单一的数据库中。用法如下:

static void LocalTranslate()
        {
            using (SqlConnection conn = new SqlConnection(args[0]))
            {
                conn.Open();
                string sql1 = "update Table1 set column1='NewValue1' where ID=0";
                string sql2 = "Insert into Table2 values(18,'rt','ghfg')";

                SqlTransaction sqlTransaction = conn.BeginTransaction();  //开启本地事物
                SqlCommand cmd = conn.CreateCommand();

                cmd.Transaction = sqlTransaction; //指定Command事物 
                try
                {
                    cmd.CommandText = sql1;
                    cmd.ExecuteNonQuery();

                    cmd.CommandText = sql2;
                    cmd.ExecuteNonQuery();

                    sqlTransaction.Commit();  //提交事物
                }
                catch (Exception ex)
                {
                    sqlTransaction.Rollback();//回滚事物                   
                }
            }
        }

2.分布式事物

即多个Connection并连接到不同的DB中,比如一个Connection连接MSSQL,另一个Connection连接到Oracle。需用到TranscationScope,它会自动提升为分布式事物,并且不用特别指定Connection及Command事物名称,

只要这些操作在TranscationScop块中。在执行完后调用Complete方法即可,如果之前遇到Exception就会自动回滚事物并不会再调用Complete方法。

static void DistributeTranslate()
        {
            //需引用System.Transaction.dll并using,开启分布式事物
            using (TransactionScope scope = new TransactionScope()) 
            {
                using(SqlConnection conn1=new SqlConnection("Server1Connection")) //指定第一个DB库的连接
                {
                    
                    try
                    {
                        conn1.Open();//打开连接会自动将其登记到TransactionScope作为轻量级事务。
                        SqlCommand cmd1 = conn1.CreateCommand(); 
                        cmd1.CommandText = "Insert into server1.dbo.table values(...) ";
                        cmd1.ExecuteNonQuery();

                        using (SqlConnection conn2 = new SqlConnection("Server2Connection"))//指定第二个DB库的连接,要嵌套到第一个语句块中
                        {
                            conn2.Open(); //打开第二个连接时事务被提升为完全分布式。
                            SqlCommand cmd2 = conn2.CreateCommand();
                            cmd2.CommandText = "Update server2.dbo.table2...";
                            try
                            {
                                cmd2.ExecuteNonQuery();
                            }
                            catch (Exception ex)
                            {
                                //log the ex.message
                            }
                        }
                    }
                    catch(Exception ex)
                    {
                        // log the ex.message,不用调用return退出就会自动回滚
                    }                   

                }

       
                //如果引发了异常,则Complete不会被调用,并且事务被回滚。
                scope.Complete() ;
            }

 

标签:控制,C#,事物,cmd,Connection,ex,SqlConnection,using
From: https://www.cnblogs.com/yagzh2000/p/17275156.html

相关文章

  • The Suspects POJ - 1611 (并查集)
    题意:n个学生分属m个团体,一个学生可以属于多个团体。一个学生疑似患病则它所属的整个团体都疑似患病。已知0号学生疑似患病,以及每个团体都由哪些学生构成,求一共多少个学生疑似患病。分析:维护一个并查集,查询与0在同一集合的元素数量。#include<iostream>#include<cstdio>using......
  • use macOS terminal can not install MicroPython on Raspberry Pi Pico bug All In O
    usemacOSterminalcannotinstallMicroPythononRaspberryPiPicobugAllInOne使用macOS终端无法在RaspberryPiPico上安装MicroPythonbugMicroPython环境搭建您可以通过USB将Pico连接到计算机,然后将文件拖放到它上面来对Pico进行编程,因此我们整理了......
  • MATLAB中的马尔可夫区制转移(Markov regime switching)模型|附代码数据
    全文链接:http://tecdat.cn/?p=17685最近我们被客户要求撰写关于马尔可夫区制转移(Markovregimeswitching)模型的研究报告,包括一些图形和统计输出。我们被要求在本周提供一个报告,该报告将结合金融统计,优化等数值方法分析师通常关心检测市场何时“发生变化”:几个月或几年内市场......
  • Beyond Compare免费安装教程
    一、背景BeyondCompare是一款文件和文件夹比较工具,它能够比较和同步文件夹和文件,并显示它们之间的差异,方便用户决定如何更新和管理它们。BeyondCompare的主要用途包括:文件和文件夹比较:用户可以将两个文件或文件夹进行比较,BeyondCompare会显示它们之间的差异,包括内容、日期......
  • R语言金融市场量化交易:布林带、价差策略、RSI交易策略,回测COMP 226|附代码数据
    全文下载链接:http://tecdat.cn/?p=29653最近我们被客户要求撰写关于量化交易的研究报告,包括一些图形和统计输出。我们将利用每日数据制定简单的交易策略,将涵盖以下内容。一个简单的介绍性交易。它每天只根据前一天的价格行为做出交易决定-我们用这个例子来介绍前瞻性的偏见......
  • 7.clone plugin(克隆插件)01
    之前其实也已经看了一篇克隆插件的文章,但是那个主要是看别人微信发的,自己给保留在博客上,感觉写的不够仔细,今天我在这里再重复写一遍,以便自己理解和学习。1.什么是克隆插件?克隆插件可以看做一个功能,就是将本地或者远程的mysqlserver实例上的数据通过快照的形式将它克隆......
  • Cashback CF940E
    给你一个长度为n的数列a和整数c你需要把它任意分段每一段假设长度为k,就去掉前[k/c](向下取整)小的数最小化剩下的数的和 #include<iostream>#include<algorithm>#include<cstring>#include<queue>#defineIOSstd::ios::sync_with_stdio(0)usingnamespacestd;c......
  • 部署了一个ChatGPT
    部署了一个ChatGPTChatGPT火爆了一段时间了,但是基于一些不可描述的原因,不能注册使用。为了方便大家体验,我部署了一个服务,能简单地体验一下ChatGPT的强大。话不多说,直接展示几个例子截图。文章最后放上体验地址和体验方式。探索问题这里我探索了一个技术问题,但是实际上你也可以......
  • unity学习——c#初级编程
    1.作为行为组件的脚本首先新建一个cube立方体  然后新建一个c#脚本,脚本用来实现立方体cube的三种颜色变化(按键实现)  脚本代码如下:usingUnityEngine;usingSystem.Collections;publicclasscolor:MonoBehaviour{voidUpdate(){if(Input.GetKeyD......
  • Socialcam引进YouTube内容 自砸招牌还是另有所图
    你能想象优酷视频网站上充斥着腾讯视频内容吗?这种事情就发生在知名个人视频分享应用Socialcam上,近来这个应用频频出现YouTube网站内容,而且YouTube标识赫然在目。详情:这对于一个在排行榜上到了一定位置,用户群开始稳定的应用来说,着实令人费解。前些日子苹果AppStore还显示了Social......