zoukankan      html  css  js  c++  java
  • 分布式数据库事务

    如果我们想实现分布式数据库事务操作,那么在.NET Framework中可以依靠MTS/COM+服务来支持自动事务操作。COM+使用DTC(Microsoft Distribution Transaction Coordinator)作为事务管理器和事务协调器在分布式环境中运行事务,这样就可以使.NET来跨越多个资源进行操作了。具体做法如下:
    首先新建一个“类库”项目,然后在这个项目中,我们自己的类继承ServicedComponent这个类,并将它的属性标记为“Transaction”(事务),代码如下:
    [Transaction (TransactionOption.Required)]
    public class MyDTC : ServicedComponent
    然后我们就可以使用Enterprise Library提供的ContextUtil中的方法来实现多数据库操作的回滚。代码如下:
    try
    {
    myconn1.Open();
    Console.WriteLine("Connection1 is successful!");
    mycmd1.CommandText = "spInsertMyInfo";
    mycmd1.Parameters.Add("@id", 6);
    mycmd1.Parameters.Add("@name", "Remy");
    mycmd1.ExecuteNonQuery();

    myconn2.Open();
    Console.WriteLine("Connection2 is successful!");
    mycmd2.CommandText = "spInsertValue";
    mycmd2.Parameters.Add("@num", 11);
    mycmd2.Parameters.Add("@systemtime", "2005-5-31");
    mycmd2.Parameters.Add("@numtest", 19);
    mycmd2.ExecuteNonQuery();

    ContextUtil.SetComplete();
    }
    catch (Exception)
    {
    ContextUtil.SetAbort();
    }
    finally
    {
    myconn1.Dispose();
    myconn2.Dispose();
    }
    最后要注意的是我们必须要对Assembly设置一些必须的属性以确保它能够被正确的注册为COM+服务,代码如下:
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.EnterpriseServices;
    using System.Reflection;
    using System.Runtime.CompilerServices;

    [assembly: ApplicationName("MyDTC")]
    [assembly: AssemblyKeyFileAttribute("C:\\mydtc.snk")]
    [assembly: ApplicationActivation(ActivationOption.Server)]
    然后我们利用regsvcs xxx.dll将我们的组建注册为COM+服务,最后我们只要自己编写一个Client端来调用这个COM+服务就可以实现多数据库事务操作了。
    以下是我查找到的一些相关资料:
    “Serviced Component Overview”:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconservicedcomponentoverview.asp
    “Writing Serviced Components”:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconwritingservicedcomponents.asp
  • 相关阅读:
    MSSQL 2012 密钥
    同台同时多开DELPHI2007的解决办法
    DELPHI快捷键
    Delphi编码规范
    解决Delphi 2010启动时卡死并报“displayNotification: 堆栈溢出”错误
    Test
    sched python 定时任务
    springboot2.x 整合redis
    springboot 忽略null属性值,不传递
    logback.xml 配置使用
  • 原文地址:https://www.cnblogs.com/cxd4321/p/1333432.html
Copyright © 2011-2022 走看看