《Windows核心编程》---ADO基础

传统的ODBC技术只能访问关系型数据库,且访问速度慢,因此,微软推出了OLE DB(应用在数据库上的对象连接于嵌入)和ADOActiveX data Object),OLE DBADO都是基于COM接口的技术,使用这种技术可以直接对数据库的驱动程序进行访问,大大提高了访问速度。同时,OLE DBADO不仅可以访问关系型数据库,还可以访问非关系型数据库。

 

ADO建立在OLE DB之上,ADO是一个DLE DB用户程序,使用ADO的应用程序都要间接地使用DLE DBADO简化了OLE DB,提供了对自动化的支持,使得像VBScript这样的脚本语言也能够使用ADO访问数据库。

ADO中有三个核心对象:

1Connection对象

Connection对象表示到数据库的连接,它管理应用程序和数据库之间的通信。RecordsetCommand对象都有一个ActiveConnection属性,该属性就是用来引用Connection对象的;

2Command对象

Command对象用来处理重复执行的查询,或处理需要检查在存储过程调用中的输出或返回参数的值的查询;

3Recordset对象

Recordset对象用来获取数据。Recordset对象存放查询的结果,这些结果由数据的行(记录)和列(字段)组成。每一列都存放在RecordsetFileds集合中的一个Field对象中。

 

其他的对象包括:字段对象(Field)、记录对象(Record)、参数对象(Parameter)、错误对象(Error)、属性对象(Property)和流对象(Stream)。

1Fields集合和Field对象:Recordset对象包含一个用于处理行集的各个Fields对象集合。行集中返回的每一列在Fields集合中都有一个相关的Field对象,它允许用户访问列名、列数据类型以及当前列中的实际值。

2Parameters集合和Parameter对象:Command对象包含一个Parameters集合,它包含于命令有关的所有参数。Parameter对象代表参数或与基于参数化查询或存储过程的Command对象相关联的参数。

3Errors集合和Error对象:Connection对象包含一个Errors集合。Error对象包含于单个操作有关的数据访问错误的详细信息。每个错误出现时,一个或多个Error对象将被放到Errors集合中,通过Error对象的属性可获得每个错误的详细信息。

 

ADO开发步骤分为:

1)引入ADO动态链接库;

2)初始化OLE/COM库环境;

3)用Connection对象连接数据源;

4)打开记录,进行数据操作;

5)程序退出,断开数据库连接。

 

VC中利用ADO访问数据库时,需要导入ADO库(msado15.dll),方法是利用import指令将此动态链接库导入:

#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename ("EOF", "aceEOF")

上面代码no_namespace表示不使用命名空间,主要是为了访问方便,在程序中可以直接访问ADO提供的ConnectionCommandRecordset这三个COM接口。rename表示将EOF改为aceEOFEOF表示记录集的结尾,但由于文件也是以EOF结尾的,因此,为了避免冲突,在导入ADO库时,需要将EOF改为另一个名字,如aceEOF

查询的关键代码如下:

CoInitialize(NULL);

_ConnectionPtr pConn(__uuidof(Connnection));

_RecordsetPtr pRs(__uuidof(Recordset));

pConn->ConnectionString="Provider=SQLOLEDB.1; Password=sa; Persist Security Info=True; User ID=sa; Initial Catalog=pubs";

pConn->Open("", "", "", adConnectUnspecified);

pRs = pConn->Execute("select * from authors", NULL, adCmdText);

 

while(!pRs->aceEOF)

{

       //输出字段,如pRs->GetCollect("name");

       ....

       pRs->MoveNext();

}

 

pRs->Close();

pConn->Close();

pRs.Release();

pConn.Release();

CoUninitialize();

 

我们也可以利用记录集智能指针对象直接执行SQL查询语句,从而获得记录集数据,例如,将上面代码pRs = pConn->Execute("select * from authors", NULL, adCmdText);替换为

pRs->Open("select * from authors", _variant_t((IDispatch*)pConn),

       adOpenDynamic, adLockOptimistic, adCmdText);

即可。

 

我们同样可以利用Command智能指针对象来访问数据库:

CoInitialize(NULL);

_ConnectionPtr pConn(__uuidof(Connnection));

_RecordsetPtr pRs(__uuidof(Recordset));

_CommandPtr pCmd(__uuidof(Command));

pConn->ConnectionString="Provider=SQLOLEDB.1; Password=sa; Persist Security Info=True; User ID=sa; Initial Catalog=pubs";

pConn->Open("", "", "", adConnectUnspecified);

pCmd->put_ActiveConnection(_variant_t((IDispatch*)pConn));

pCmd->CommandText="select * from authors";

pRs = pCmd->Execute(NULL, NULL, adCmdText);

while(!pRs->aceEOF)

{

       //输出字段,如pRs->GetCollect("name");

       ....

       pRs->MoveNext();

}

 

pRs->Close();

pConn->Close();

pCmd.Release();

pRs.Release();

pConn.Release();

CoUninitialize();

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ACE1985/article/details/5653333
上一篇《Windows核心编程》---内存映射文件基础
下一篇《Windows核心编程》---内核对象和进程基础
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭