视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Vc++数据库编程
2020-11-09 07:33:16 责编:小采
文档


欢迎进入C/C++编程社区论坛,与300万技术人员互动交流 >>进入 ODBC开放数据库互连(Open Database Connectivity)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库

欢迎进入C/C++编程社区论坛,与300万技术人员互动交流 >>进入

  ODBC开放数据库互连(Open Database Connectivity)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

  ADO (ActiveX Data Objects) 是微软公司的一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。ADO被设计来继承微软早期的数据访问对象层,包括RDO (Remote Data Objects) 和DAO(Data Access Objects)。

  使用#import方法对ADO进行操作

  在#import中,你需要提供所包含的类型库的路径和名称,它能够自动产生一个对GUIDs的定义,同时对自动生成对ADO对象的封装。

  还能够列举它在类型库中所能找到的类型,对任何你所引用的类型库,VC++会在编译的时候自动生成两个文件:

  一个头文件(.tlh),它包含了列举的类型和对类型库中对象的定义。

  一个实现文件(.tli)对类型库对象模型中的方法产生封装。

  例

  #import "c:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

  /*VC++会自动产生msado15.tlh和msado15.tli两个文件。no_namespace意味着你不需要在初始化变量的时候引用名字空间。对EOF进行该名,是必要的,因为典型的VC++应用都已经定义了EOF作为常数-1*/

  CoInitialize(NULL);

  /*CoInitialize是 Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象。参数被保留,且必须为NULL。CoInitialize并不装载COM 库,它只用来初始化当前线程使用什么样的套间。使用这个函数后,线程就和一个套间建立了对应关系,线程在此套间运行。CoInitialize和CoUninitialize必须成对使用。*/

  _ConnectionPtr m_pConnection(_uuidof(Connection)); //使用智能指针产生一个连接指针

  _RecordsetPtr m_pRecordset(_uuidof(Recordset)); //使用智能指针产生一个记录集指针

  try{

  m_pConnection->Open("DSN=Student","","",0); //建立连接,DSN(Data Source Name )是你要连接ODBC数据源的名称

  m_pRecordset = m_pConnection->Execute("select * from Student",NULL,adCmdText); //执行查询语句

  while(!m_pRecordset->adoEOF)

  {

  _variant_t TheValue; //_variant_t封装并管理VARIANT数据类型,是COM中使用的数据类型,COM是Component Object Model(组件对象模型)

  TheValue = m_pRecordset->GetCollect("Sname"); //获取表中字段为“Sname”的值

  m_pRecordset->MoveNext(); //移动到下一条记录

  }

  }catch(_com_error e)

  {

  AfxMessageBox(e.ErrorMessage());

  }

  m_pRecordset->Close();

  m_pConnection->Close();

  m_pRecordset = NULL;

  m_pConnection = NULL;

  CoUninitialize();

下载本文
显示全文
专题