• 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 > Com中能使用ADO吗?

Com中能使用ADO吗?

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

佚名通过本文主要向大家介绍了 Com中能使用ADO吗?等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: Com中能使用ADO吗?
描述:

我想在COM中使用ADO,实现如下:在stdafx.h加入#import语句引入ADO,结果编泽时出错.而同样的#import语句在普通的对话框中能编泽运行,真是奇怪.(我没有用ATL)


解决方案1:

在atl中可以用ado,

解决方案2:

在atl中可以用ado,
创建名为 NativeData 的 ATL DLL 项目。 
在“文件”菜单上单击“新建”,然后单击“项目”。 
将出现“新建项目”对话框。 
在“项目类型”窗格中,单击“Visual C++ 项目”,并在“模板”窗格中,单击“ATL 项目”。 
将项目命名为 NativeData,然后单击“确定”。 
即会出现“ATL 项目向导”。 
单击“完成”以创建默认的 ATL 项目。 
添加一个名为 DataAccessor 的新类。 
在“类视图”中,右击 NativeData 项目。 
在快捷菜单上单击“添加”,然后单击“添加类”。 
即会出现“添加类”对话框。 
单击“ATL 简单对象”并单击“打开”。 
即会出现“ATL 简单对象向导”。 
将对象命名为“DataAccessor”并单击“完成”以便将对象添加到项目中。 
在 IDataAccessor 上添加名为 InitializeADO 的方法。 
在“类视图”中,打开 NativeData 项目并右击 IDataAccessor 接口。 
在快捷菜单上单击“添加”,然后单击“添加方法”。 
“添加方法向导”出现。 
将该方法命名为 InitializeADO,并且不要为该方法指定任何参数。 
单击“完成”。 
按如下所示在 DataAccessor.cpp 中实现 InitializeADO: 
注意   您必须提供一个对 Pubs 数据库的连接字符串,如以下代码注释所述。更简便的方法是:在服务器资源管理器中新建一个连接,然后将“属性”窗口中的连接字符串复制给该连接。此外,如果选择在以下代码中使用 Windows NT 集成安全设置,则不需要用户 ID 和密码(因此可以将声明和定义 bstrUserID 和 bstrPassword 的行移除掉)。
STDMETHODIMP CDataAccessor::InitializeADO(void)
{
   USES_CONVERSION;   // Enables OLE2T macro
   HRESULT hr = S_OK;
   // Variables to contain connection string, 
   // database userid, and password.
   _bstr_t bstrConnectString;
   _bstr_t bstrUserID;   // Remove this line if using Windows NT 
                         // integrated security.
   _bstr_t bstrPassword; // Remove this line if using Windows NT
                         // integrated security.
   try
   {
      // Note: In the following lines, provide your own
      // connection string to pubs and user ID as indicated:
      // Initialize variables
      bstrConnectString = L"YOUR CONNECTION STRING";
      bstrUserID = <YOUR USER ID>;
      bstrPassword = <YOUR PASSWORD>;
      // Security note: hard-coding a password is 
      // a security weakness
      // Create an instance of ADOConnection:
      hr = m_spADOConnection.CreateInstance(__uuidof(Connection), NULL);
      // Open the connection:
      hr = m_spADOConnection->Open(bstrConnectString, bstrUserID, 
           bstrPassword, adOptionUnspecified);
      // Create an instance of a recordset:
      hr = m_spADORecordset.CreateInstance(__uuidof(Recordset), NULL);
      // Open that recordset to a valid table:
      _bstr_t bstrQuery(L"SELECT * FROM authors");
      _variant_t vQuery(bstrQuery);
      // Pass the ADOConnectionPtr to the recordset so that the
      // recordset connects to the appropriate database:
      _variant_t vDispatch((IDispatch*)m_spADOConnection);
      m_spADOConnection->AddRef();
      // Open the recordset. Note that when you call
      // GetRecordSet you get a pointer to this recordset:
      hr = m_spADORecordset->Open(vQuery, 
                        vDispatch, 
                        adOpenDynamic, 
                        adLockOptimistic, 
                        adCmdText);
   }
   catch(_com_error &err)
   {
      TCHAR szBuf[2056];
      _tcscpy(szBuf, _T(""));
      _tcscat(szBuf, err.ErrorMessage());
       _bstr_t bstrSource(err.Source());
      _bstr_t bstrDesc(err.Description());
      _tcscat(szBuf, (char*)bstrSource);
      _tcscat(szBuf, (char*)bstrDesc);      
#ifdef _DEBUG
      OutputDebugString(szBuf);
#endif // _DEBUG
      return E_FAIL;
   }
   return S_OK;
}
在 IDataAccessor 上添加名为 GetRecordSet 的方法。 
在“类视图”中,右击“IDataAccessor”接口。 
在快捷菜单上单击“添加”,然后单击“添加方法”。 
“添加方法向导”出现。 
将该方法命名为 GetRecordSet,并为该方法指定一个 [out,retval] 参数 IUnknown** NativeRecordSet。 
单

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

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

相关文章

  • 2017-06-04 在DCOM组件中,如何从服务器端得到客户机的名称?有现成的系统函数吗?如果不打算另外写一个接口的话。
  • 2017-06-04 一个DLL要成为一个COM组件载体的必要条件是至少要导出哪两个全局函数?
  • 2017-06-04 ATL做的windowless控件的重绘问题
  • 2017-06-05 MFC生成的OFFICEACTIVEX控件,如何在USER下注册
  • 2017-06-04 vc6写的com,用本地C#写的程序可以顺利调用,但是通过webservice就不能调用,请教这是什么原因
  • 2017-06-05 三个简单的问题,一个问题20分,最后一个60分!
  • 2017-06-05 请大家推荐你们认为好用的进程管理器!!!谢谢!
  • 2017-06-05 _bstr_t的使用问题
  • 2017-06-05 加上<!DOCTYPEhtm>后,子线程中用GetIDsOfNames就取不到dispid了,请各位指教。
  • 2017-06-04 activeX在服务器端注册,下载到本地后,怎样打开(http://wwwtestcom/image/123tif的图像文件?散分!!!

文章分类

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

最近更新的内容

    • 当前分布式对象计算技术中哪个最好?
    • 关于VC中用DLL导出数组的问题
    • mfc中如何用代码实现teechart控件从excel导入数据绘图
    • MFC中BHO插件怎么写入DISPID_FILEDOWNLOAD,DISPID_NEWWINDOWS3
    • NetUserAdd怎样在远程机器上创建用户?
    • 哪里有好的VC++培训班
    • 其它进程怎么取到正在IE中显示的指定文本框或标签的内容?
    • 测试程序不能调用ACTIVEX控件的方法(已注册)
    • 网页中加载的ActiveX控件,在使用时报加载错误,网页关闭
    • 最简单的COM,有些疑问,不知道如何测试

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

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