Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > 調用MSDTC控制分散式Transaction
【标  题】:調用MSDTC控制分散式Transaction
【关键字】:MSDTC,Transaction
【来  源】:http://blog.csdn.net/acrodelphi/archive/2006/06/06/775690.aspx

調用MSDTC控制分散式Transaction

Your Ad Here

MSDN上多方查找資料,找到了調用MSDTC處理Transaction的函數,經過測試后整理如下:

unit DTCTransaction;

 

interface

uses

  SysUtils,OleDB,COmObj,DCConst,Windows;

const

  CLSID_MSDASQL  :TGUID='{C8B522CB-5CF3-11CE-ADE5-00AA0044773D}'; //oledb for ODBC

  CLSID_SQLOLEDB :TGUID='{0C7FF16C-38E3-11D0-97AB-00C04FC2AD98}'; //oledb for sql server

 

  function  DTCTransactionStart:ITransaction;

  procedure DTCTransactionCommit(ATransaction:ITransaction);

  procedure DTCTransactionRollback(ATransaction:ITransaction);

 

implementation

 

  function DtcGetTransactionManager(

    hostName:PChar;

    tmName:PChar;

    iid:Pointer;//pointer of TGUID;

    dwReserved1:DWord;

    wReserved2:Word;

    pvReserved:Pointer;

    out txnDispenser:ITransactionDispenser):HResult;cdecl;external 'xolehlp.dll';

 

function DTCTransactionStart:ITransaction;

var

  ID:ITransactionDispenser;

begin

  Result:=nil;

  OLECheck(DtcGetTransactionManager(

    nil,

    nil,

    @IID_ITransactionDispenser,

    0,0,

    nil,

    ID));

 

  OLECheck(ID.BeginTransaction(nil,

    TransactionISOLATIONLEVEL,

    ISOFLAG_RETAIN_DONTCARE,nil,Result));

end;

 

procedure DTCTransactionCommit(ATransaction:ITransaction);

begin

  OLECheck(ATransaction.Commit(false,0,0));

end;

 

procedure DTCTransactionRollback(ATransaction:ITransaction);

var

  B:BOID;

begin

  OLECheck(ATransaction.Abort(@B,false,false));

end;

 

end.

ADO加入分散式Transaction的方法:

unit ADOTransaction;

 

interface

uses

  ADODB,ADOInt,OLEDB,ComObj,DCConst;

 

  procedure JoinSessionIntoTransaction(AConnectionArray:array of TADOConnection;

            ATransaction:ITransaction);

  procedure UnJoinSession(AConnectionArray:array of TADOConnection);

 

implementation

 

procedure JoinSessionIntoTransaction(AConnectionArray:array of TADOConnection;

  ATransaction:ITransaction);

var

  ICC:ADOConnectionConstruction;

  ISP:IInterface;

  ITJ:ITransactionJoin;

  i:integer;

begin

  for i:=Low(AConnectionArray) to High(AConnectionArray) do

  begin

    if not AConnectionArray[i].Connected then AConnectionArray[i].Open;

    OLECheck(AConnectionArray[i].ConnectionObject.QueryInterface(

      IID_ADOConnectionConstruction,ICC));

    ISP:=ICC.Get_Session;

    OLECheck(ISP.QueryInterface(IID_ITransactionJoin,ITJ));

    OLECheck(ITJ.JoinTransaction(ATransaction,TransactionISOLATIONLEVEL,0,nil));

  end;

end;

 

procedure UnJoinSession(AConnectionArray:array of TADOConnection);

var

  ICC:ADOConnectionConstruction;

  ISP:IInterface;

  ITJ:ITransactionJoin;

  i:integer;

begin

  for i:=Low(AConnectionArray) to High(AConnectionArray) do

  begin

    if AConnectionArray[i].Connected then

    begin

      OLECheck(AConnectionArray[i].ConnectionObject.QueryInterface(

        IID_ADOConnectionConstruction,ICC));

      ISP:=ICC.Get_Session;

      OLECheck(ISP.QueryInterface(IID_ITransactionJoin,ITJ));

      OLECheck(ITJ.JoinTransaction(nil,0,0,nil));

    end;

  end;

end;

 

end.

AutoInc、Default與BatchUpdate:【上一篇】
SQL server数据类型比较:【下一篇】
【相关文章】
  • ActiveRecord学习(五):Validation & Transaction
  • c# database programming(24)-Using Transaction
  • "transaction log is damaged"
  • 一个使用Spring transaction template的小工具
  • javax.ejb.TransactionRolledbackLocalException翻译
  • Using distributed transactions in .Net 1.x without deriving from ServicedComponent
  • Transaction in ADO.net 2.0
  • SqlCommandBuilder.DeriveParameters 在 SqlTransaction 下的 Bug 的解决方法
  • Auditing Past Transactions With Oracle LogMiner
  • Displays the menu path for a transaction
  • 【随机文章】
  • 中文DocBook转换为PDF文件
  • php 上传类(自家用)
  • Ubuntu安装samba-swat
  • Linux教程-系统管理-RPM卸载篇
  • 在哪安家?
  • Smarty教程之二:程序设计部分 [ 2006/08/28 22:13 | by chaizx
  • 读英文技术文章的新点子
  • 用低档PC机+红旗Linux打造稳定高效的服务器软路由(下)
  • Fireworks三分钟创建网页相册
  • 需求分析的20条法则【转】
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.