随笔 - 25, 文章 - 0, 评论 - 6, 引用 - 0
数据加载中……

Vc++ 数据库编程

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(); 

posted on 2013-03-05 13:41 chenjt3533 阅读(241) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理