Vc++ 数据库编程

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

你可能感兴趣的:(Vc++ 数据库编程)