ADO 主要对象介绍
ADO对象包括:连接对象(Connection Object)、命令对象 (Command Object) 、记录集对象(RecordSet Object)、字段对象(Field Object) 、记录对象(Record Object) 、错误对象(ErrorObject)、参数对象(Parameter Object) 、属性对(Property Object)和流对象(Stream Object) 。其中最为重要的3 个对象是连接对象、命令对象和记录集对象。
连接对象(Connection Object)代表一个和数据源的连接,以后的数据库操作都是建立在这个连接上的。这和 MFC ODBC中创建数据源的连接的CDatabase数据库类非常相似,其他功能也非常相似。连接对象提供了对数据库的操作,但是它不返回数据库操作之后的记录集,这是和命令对象不同的一点。
命令对象(Command Object)用来处理数据库的一些操作,在某些方面具有和连接对象相同的功能。例如都可以执行标准的SQL 语句以及存储过程,不过命令对象可以返回带有记录集的结果。
记录集对象(RecordSet Object)代表了一个记录集,和MFC ODBC中的CRecordset 记录集类有些相似,用来访问记录集。记录集对象能方便地实现记录的添加、修改和删除操作。
在使用这3 个对象的时候,需要定义与之对应的3 个智能指针,分别为:_ConnectionPtr、
_CommandPtr 和_RecordsetPtr ,然后调用它们的CreateInstance方法实例化,从而创建这3
个对象的实例。
_bstr_t 和_variant_t 类
在利用ADO进行数据库开发的时候,_bstr_t 和_variant_t两个类很有用,省去了许多BSTR 和VARIANT 类型转换的麻烦。COM编程不使用CString类,因为COM必须设计成跨平台,它需要一种更普遍的方式来处理字符串以及其他数据类型,这也是VARIANT 变量数据类型的来历。BSTR 类型也是如此,用来处理 COM中的字符串。VARIANT 是一个巨大的 union 联合体,几乎包含了所有的数据类型,简单来说,_variant_t是一个类,封装了VARIANT 的数据类型,并允许我们简单地对之进行强制类型转换。同样,_bstr_t 是对BSTR 进行了封装的类。有了这两个类,开发ADO程序将得到很大的方便。
ADO连接Oracle数据库
1.引入ADO库
在Visual C++中使用ADO开发数据库之前,需要引入 ADO库。可以在 StdAfx.h 文件
末尾处引入ADO库文件,方法如下:
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
#pragma warning(disable:4146)
使用预处理指令 import使程序在编译过程中引入ADO动态库(msado15.dll)。
no_namespace表明不使用命令空间。“rename("EOF","adoEOF")”表明把ADO中用到的EOF 改为adoEOF,防止发生命名冲突。
2.初始化COM库
在MFC中的App类的InitInstance()函数中加入
CoInitialize(NULL);//表示com库的初始化
或者AfxOleInit();
鼠标右键点击建立类向导(或者按Ctrl+w)添加函数ExitInstance(),在其中加入代码
CoUninitialize();//释放com库。
3.建立数据源
进入 控制面板—>管理工具—>数据源—>系统DNS
点击添加,选择Oracle in OraDb10g_home1,不同的oracle版本安装的in后面的可能不一样,填写正确。点击OK完成。
(这里大家可以在网上找找带图片的资料添加)
4.连接数据库
建立数据库的连接需要使用连接对象(Connection Object)。首先定义一个 _ConnectionPtr类型的指针,代码如下:
_ConnectionPtr m_pConnection;
然后调用CreateInstance方法实例化,代码如下:
m_pConnection.Crea teInstance( _uuidof(Con nection));
调用Connection对象的Open方法创建数据库的连接,Open函数的原型如下:
HRESULT Open (
_bstr_t Con nectionStri ng,
_bstr_t Use rID,
_bstr_t Pas sword,
long Option s );
其中ConnectionString是一个包含连接信息的字符串,UserID是访问数据库的用户名称,Password是访问数据库的密码,Options为可选参数。如果在连接字符串ConnectionString中包含了数据库用户名和密码,UserID和Password值可以为空。
ADO可以连接许多数据库供应商提供的数据源,尽管这些供应商有自己不同的特点,但是ADO使用相同的编程模型,这也是 ADO强大和灵活的一个地方。现在构造一个可以连接Oracle数据库的连接字符串ConnectionString,利用Oracle提供的OLE DB 数据供应商(Oracle Provider for OLE DB),其典型的连接语句为“Provider=OraOLEDB.Oracle.1;DataSource=serverName;User ID=MyUserID; Password= MyPassword”。其中 DataSource是本地服务名,也就是数据源。数据库本地服务名为 ORCL,数据库用户名为 db1,密码为 db1的连接数据源的代码如下:
try
{
m_pConnection.CreateInstance(_uuidof(Connection));
m_pConnection.CreateInstance(_uuidof(Recordset));
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect=_T("Provider=OraOLEDB.Oracle.1;Password=tiger;User ID=scott;Data Source=orcl;Persist Security Info=true");
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("数据库连接失败!\r\n错误信息:%s", e.ErrorMessage());
AfxMessageBox(errormessage);
}
代码中使用了try 和catch来处理COM异常,如果不处理,ADO的异常有可能使程序崩溃,所以一定要记得捕捉_com_error 异常。代码中使用的OLEDB供应商为Oracle Provider for OLE DB,如果采用微软提供的供应商 Microsoft OLEDB Provider for Oracle 的驱动程序,即“Provider=MSDAORA.1 ”,其他参数不变 ,有的功能不能实现。
本文介绍了ADO对象模型中的关键对象,包括连接对象、命令对象和记录集对象,并详细讲解了如何在Visual C++环境下使用ADO连接Oracle数据库的具体步骤。
&spm=1001.2101.3001.5002&articleId=7585370&d=1&t=3&u=ec133e635c2f44b294f8642277b69d6d)
988

被折叠的 条评论
为什么被折叠?



