• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 关于OLEDB实现分布式事务的问题。

关于OLEDB实现分布式事务的问题。

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了如何实现分布式事务,分布式事务,分布式事务处理机制,分布式事务解决方案,java分布式事务等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 关于OLE DB实现分布式事务的问题。
描述:

在编写OLE DB实现分布式事务的代码中,使用了
DtcGetTransactionManager函数。
在VC++编辑时,可以看到函数的参数提示。
可是,编译的时候却提示该函数是未定义的表识符。请问,是什么原因?
是不是漏掉了什么#include库?
新手,初学用SDK编程,见笑见笑!
代码如下:
//*********************************************************
//使用OLE DB API控制分布式事务的例子
//运行本示例要求用户机器上安装有MSDAC SDK
//此示例假定本机已经有数据源MyOrder
//,该数据源连接到SQL Server数据库Northwind
//*********************************************************
#define UNICODE
#define _UNICODE
#define DBINITCONSTANTS
#define INITGUID
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <stddef.h>
#include <iostream.h>
#include <oledb.h>
#include <oledberr.h>
#include <msdaguid.h>
#include <msdasql.h>
void main()
{
 IDBInitialize  *pIDBInitialize = NULL;
 IDBCreateSession* pCreateSession = NULL;
 IDBCreateCommand* pCreateCommand = NULL;
 IRowset*   pRowset   = NULL;
 ICommandText*  pCommandText = NULL;
 ITransaction*  pTransaction = NULL;
 ITransactionJoin* pTransacti />  ITransactionDispenser* pTransactiondispenser = NULL;
 IDBProperties*  pIDBProperties;
 DBPROP    InitProperties[4];
 DBPROPSET   rgInitPropSet[1];
 int     i;
 LONG    cNumRows;
 bool bHasErr  = FALSE;
 //要执行的命令
 LPCTSTR wCmdString=OLESTR("SELECT EmployeeID,Title FROM EMPLOYEES");
 LPCTSTR wSQL=OLESTR("Update Employees Set Title='AD Vice President' WHERE
EmployeeID=6");
 CoInitialize(NULL);
 CoCreateInstance(CLSID_MSDASQL,NULL,CLSCTX_INPROC_SERVER,
  IID_IDBInitialize,(void**) &pIDBInitialize);
 for(i=0;i<4;i++)
 {
  VariantInit(&InitProperties[i].vValue);
  InitProperties[i].dwOpti />   InitProperties[i].colid=DB_NULLID;
 }
 //level of Prompt
 InitProperties[0].dwPropertyID=DBPROP_INIT_PROMPT;
 InitProperties[0].vValue.vt=VT_I2;
 InitProperties[0].vValue.iVal=DBPROMPT_NOPROMPT;
 //UserName
 InitProperties[1].dwPropertyID=DBPROP_AUTH_USERID;
 InitProperties[1].vValue.vt=VT_BSTR;
 InitProperties[1].vValue.bstrVal=SysAllocString((LPOLESTR)L"sa");
 //password
 InitProperties[2].dwPropertyID=DBPROP_AUTH_PASSWORD;
 InitProperties[2].vValue.vt=VT_BSTR;
 InitProperties[2].vValue.bstrVal=SysAllocString((LPOLESTR)L"364018");
 //数据源名称
 InitProperties[3].dwPropertyID=DBPROP_INIT_DATASOURCE;
 InitProperties[3].vValue.vt=VT_BSTR;
 InitProperties[3].vValue.bstrVal=SysAllocString((LPOLESTR)L"MyOrder");
 rgInitPropSet[0].guidPropertySet=DBPROPSET_DBINIT;
 rgInitPropSet[0].cProperties=4;
 rgInitPropSet[0].rgProperties=InitProperties;
 //设置初始化属性
 pIDBInitialize->QueryInterface(IID_IDBProperties,
        (void**)&pIDBProperties);
 pIDBProperties->SetProperties(1,rgInitPropSet);
 pIDBProperties->Release();
 //连接到数据源
 HRESULT hr=pIDBInitialize->Initialize();
 pIDBInitialize->QueryInterface(IID_IDBCreateSession,(void
**)&pCreateSession);
pCreateSession->CreateSession(NULL,IID_IDBCreateCommand,(IUnknown**)&pCreate
Command);
 hr=DtcGetTransactionManager(NULL,NULL,IID_ITransactionDispenser,0,0,NULL
       ,(void**)&pTransactionDispenser);//====>>>这一句编译出错了
 //从Command得到ITransaction
pCreateCommand->QueryInterface(IID_ITransactionLocal,(void**)&pTransaction);
 //启动本地事务
 hr=((ITransactionLocal*)pTransaction)->StartTransaction(
         ISOLATIONLEVEL_REPEATABLEREAD,0,NULL,NULL);
 if SUCCEEDED(hr)
 {
  ::printf("启动事务成功!");
 }
 pCreateCommand->CreateCommand(NULL,IID_ICommandText,(IUnknown
**)&pCommandText);
 //执行UPDATE命令
 pCommandText->SetCommandText(DBGUID_DBSQL,wSQL);
 hr=pCommandText->Execute(NULL,IID_IRowset,NULL,&cNumRows,
       (IUnknown**)&pRowset);
 if FAILED(hr)
  bHasErr=TRUE;
 else
  printf("\n执行SQL:%S",wSQL);
 //执行SELECT命令
 pCommandText->SetCommandText(DBGUID_DBSQL,wCmdString);
 hr=pCommandText->Execute(NULL,IID_IRowset,NULL,&cNumRows,
       (IUnknown**)&pRowset);
 if FAILED(hr)
  bHasErr=TRUE;
 else
  printf("\n执行SQL:%S",wCmdString);
 if(bHasErr)
 {
  pTransaction->Abort(NULL,FALSE,FALSE);
  printf("\n事务回滚!\n");
 }
 else
 {
  pTransaction->Commit(FALSE,XACTTC_SYNC,0);
  printf("\n事务提交!\n");
 };
 //清理内存
 pTransaction->Release();
 pRowset->Release();
 pCommandText->Release();
 pCreateCommand->Release();
 pCreateSession->Release();
 pIDBInitialize->Uninitialize();
 pIDBInitialize->Release();
 CoUninitialize();
};
哪位如果实现过分布式事务,最好请给一点代码看看。感谢!


解决方案1:

用ADO吧。
ADO有 BeginTrans
      CommitTrans

解决方案2:

http://www.vckbase.com/tools/findtools.asp?keyword=OLE+DB

解决方案3:

COM+ IS THE FIRST CHOICE


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于OLEDB实现分布式事务的问题。

相关文章

  • 2017-06-04 请教COleControl类中OnDraw和PreTranslateMessage函数调用先后关系
  • 2017-06-05 请问win32的几种同步对象?
  • 2017-06-05 同一台机器的进程通信问题?怎样合法关掉子进程?!
  • 2017-06-05 龚建伟串口例程的问题
  • 2017-06-05 VARIANT类型怎样表示一个Guid的值。
  • 2017-06-04 如何把图片里三个矩形(三个连通域)分别显示在三张图片里,并保证各矩形相对原图位置不变
  • 2017-06-04 ActiveX文档服务器的几个问题,希望得到指点!
  • 2017-06-04 能否告诉我如何编写一组件,目的是得到一个共用的记录集,好像通过编写一Function使返回值为Recordset,行不通
  • 2017-06-04 请教"_NoAddRefReleaseOnCComPtr"的含义。
  • 2017-06-04 使用vc编写ActiveX控件能否在本地被浏览器调用,谢谢

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • ATL中在哪儿添加全局的变量与函数
    • #import的使用????
    • 如何传递自定义结构--MFCActiveXControlWizard建立的工程
    • debug版本的问题
    • 初学COM,请问谁有<<COM编程精彩实例>>光盘的代码提供?
    • 关于在网页中ActiveX控件获取服务器[SQLServer]的数据,表现于客户端,请教于有经验的那种方法比较好一些!
    • 请帮忙,CHtmlView如何设置为“从右到左的文档”?蒋老大救命!
    • 我在WIN98中用CreateProcess重定向到管道的控制台文本无法获得?
    • 星级高手请进---MFC中,两进程间用WINDOWS注册消息通讯被GUI消息所破坏
    • (要出人命的啊)被vc害了,我欲哭无泪。能解决的要我干什么都可以啊

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有