ADO智能指针使用详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ADO智能指针使用详解
一、ADO接口——Connection对象(连接对象)——对应智能指针为_ConnectionPtr
在使用ADO进行操作之前,必须使用AfxOleInit()函数来进行初始化。
使用BeginTrans、CommitTrans和RollbackTrans方法可以启动、提交和回滚一个处理事务。
通过操作the Errors 集合可以获取和处理错误信息,操作CommandTimeout属性可以设置连接的溢出时间,操作ConnectionString属性可以设置连接的字符串,操作Mode属性可以设置连接的模式,操作Provider属性可以指定OLE DB提供者。
(1)Open()方法:用于打开一个库连接
_ConnectionPtr智能指针的用法:
①首先定义一个Connection类型的指针,然后调用CreateInstance()来创建一个连接对象的实例,再调用Open()函数建立与数据源的连接。
②在建立连接对象后,可以使用连接对象的Execute()函数来执行SQL命令。
_ConnectionPtr智能指针Open()方法的原型:Open(_bstr_t ConnectionString,_bstr_t UserID,_bstr_t Password,long Options)
①ConnectionString为连接字串,UserID是用户名,Password是登陆密码
②Options是连接选项,可以是如下几个常量:
1> adModeUnknown 缺省,当前的许可权未设置
2> adModeRead 只读
3> adModeWrite 只写
4> adModeReadWrite 可以读写
5> adModeShareDenyRead 阻止其它Connection对象以读权限打开连接
6> adModeShareDenyWrite 阻止其它Connection对象以写权限打开连接
7> adModeShareExclusive 阻止其它Connection对象打开连接
8> adModeShareDenyNone 阻止其它程序或对象以任何权限建立连接
(2)Execute()方法:用于执行SQL语句
函数原型:_RecordsetPtr Connection::Execute(_bstr_t CommandText,VARIANT* RecordsAffected,long Options)
参数:
①CommandText是命令字串,通常是SQL命令,
②RecordsAffected是操作完成后所影响的行数
③Options表示CommandText中内容的类型,可以取下列值之一:
1> adCmdText 表明CommandText是文本命令
2>adCmdTable 表明CommandText是一个表名
3>adCmdProc 表明CommandText是一个存储过程
4>adCmdUnknown 未知
Execute执行完后返回一个指向记录集的指针(_ResultsetPtr类型)
(3)异常捕获:出现的异常为_com_error
Error对象包含了ADO数据操作时发生错误的详细描述,ADO的任何对象都可以产生一个或者多个数据提供者错误,当错误发生时,这些错误对象被添加到Connection 对象的Errors集合里。当另外一个ADO对象产生一个错误时,Errors集合里的Error对象被清除,新的Error对象将被添加到Errors集合里。
借助于Errosr对象的集合、方法和属性,可以通过读取Number和Description属性,获得ADO错误号码和对错误的描述,通过读取Source属性得知错误发生的源。
二、ADO接口——Recordset对象(记录集对象)——对应智能指针为_RecordsetPtr
_RecordsetPtr智能指针,它是专门为通过记录集操作数据库而设立的指针,通过该接口可以对数据库的表内的记录、字段等进行各种操作。记录集相当于是实际数据的一份拷贝。
A.创建记录集对象
_ConnectionPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recorset));
创建记录集对象,只是为它分配内存空间,记录集中不含任何数据。
B.打开记录集
记录集对象是用来获得数据库中的数据并对其操作的,所以还要打开记录集,从数据库中取得数据记录。可有多种方法打开记录集,如使用_CommondPt::.Execute()来返回一个记录集,或是用_Recordset::Open()方法来打开一个记录集。
(1)Open()方法
函数原型:
HRESULT Recordset::Open(const _variant_t&Source,const
_variant_t&ActiveConnection,enum CursorTypeEnum CursorType,enum LockTypeEnum LockType,long Options)
For Example:假设m_pConnection是已经建立好的连接,我们使用_RecordsetPtr 接口的Open方法打开Employees表的记录集的语句如下:
m_pRecordset->Open("SELECT * FROM Employees", _variant_t((IDispatch*)m_pConne ction,true), adOpenStatic, adLockOptimistic, adCmdText);
参数:
Source是数据查询字符串,可以是一个SQL语句、一个表的名字或一个命令对象等等;
ActiveConnection是已经建立好的连接(我们需要用Connection对象指针来构造一个_variant_t对象);
CursorType光标类型,它是枚举CursorTypeEnum中的一个值,可取如下值