1. 百度文库:http://wenku.baidu.com/view/8e2e99ecf8c75fbfc77db230.html 2. CSDN:http://blog.csdn.net/augusdi/article/details/7005597 接口概述: ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。 (1) _ConnectionPtr接口返回一个记录集或一个空指针 通常使用它来创建一个数据连接 或 执行一条不返回任何结果的SQL语句,如一个存储过程。 (使用_ConnectionPtr接口返回一个记录集不是一个好的使用方法) 通常同Cdatabase一样,使用它创建一个数据连接,然后使用其它对象执行数据输入输出操作。 (2) _CommandPtr接口返回一个记录集 它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。 在使用_CommandPtr接口时,你可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。 如果你只执行一次或几次数据访问操作,后者是比较好的选择。 但如果你要频繁访问数据库,并要返回很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接, 然后使用_CommandPtr接口执行存储过程和SQL语句。 (3) _RecordsetPtr是一个记录集对象 与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。 同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接, 可以用一个连接串代替连接指针赋给_RecordsetPtr的connection成员变量,让它自己创建数据连接。 如果你要使用多个记录集,最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句。 使用步骤: 1> 引入ADO类 #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF") 其作用同我们熟悉的#include类似,编译的时候系统会为我们生成 msado15.tlh、ado15.tli 两个C++头文件来定义ADO库。 在 #import "" 引入ADO之后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr 2> 初始化COM库,引入ADO库定义文件 在MFC中可以用 AfxOleInit(); 非MFC环境中用 CoInitialize(NULL);/ CoUnInitialize(); 3> 用Connection对象连接数据库 首先我们需要添加一个指向Connection对象的指针: [cpp] view plaincopy
在这段代码中我们是通过Connection对象的Open() 方法来进行连接数据库的,下面是该方法的原型: HRESULT Connection::Open (_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options ) 参数: ConnectionString 为连接字串, UserID 是用户名, Password 是登陆密码, Options 是连接选项,用于指定Connection对象对数据的更新许可权, Options可以是如下几个常量: adModeUnknown: 缺省。当前的许可权未设置 补充:常用的数据库连接方法: (1) 通过JET数据库引擎对ACCESS2000数据库的连接 m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb","","",adModeUnknown); (2) 通过DSN数据源对任何支持ODBC的数据库进行连接 m_pConnection->Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown); //m_pConnection->Open("DSN=test;","","",0); //连接叫作test的ODBC数据源\ (3) 不通过DSN对SQL SERVER数据库进行连接: m_pConnection->Open("driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=13Array","","",adModeUnknown); 其中Server是SQL服务器的名称,DATABASE是库的名称 Connection对象中两个有用的属性:ConnectionTimeOut与State 其中:ConnectionTimeOut用来设置连接的超时时间,需要在Open之前调用,例如: [cpp] view plaincopy
State属性指明当前Connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如: [html] view plaincopy
4> 利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记 录集进行查询、处理 SQL命令的执行可以采用多种形式,下面我们一进行阐述。 (1) 利用Connection对象的Execute方法执行SQL命令 Execute方法的原型如下所示: _RecordsetPtr Connection::Execute (_bstr_t CommandText, VARIANT * RecordsAffected, long Options ) 参数: CommandText 是命令字串,通常是SQL命令; Execute执行完后返回一个指向记录集的指针_RecordsetPtr,下面我们给出具体代码并作说明。 [cpp] view plaincopy
(2)利用 Command对象来执行SQL命令 [cpp] view plaincopy
在这段代码中我们只是用Command对象来执行了SELECT查询语句,Command对象在进行存储过程的调用中能真正体现它的作用。下次我们将详细介绍。 (3) 直接用Recordset对象进行查询取得记录集 m_pRecordset->Open("SELECT * FROM 学生信息",_variant_t((IDispatch *)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText); Open方法的原型是这样的: HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ) 参数: 1> Source是数据查询字符串 2> ActiveConnection是已经建立好的连接(我们需要用Connection对象指针来构造一个_variant_t对象) 3> CursorType光标类型,它可以是以下值之一,请看这个枚举结构: 5> 使用完毕后关闭连接,释放对象。 (3) 执行SQL命令并取得结果记录集 为了取得结果记录集,我们定义一个指向Recordset对象的指针: _RecordsetPtr m_pRecordset; 1. m_pRecordset.CreateInstance("ADODB.Recordset"); (4) 记录集的遍历、更新 根据我们刚才通过执行SQL命令建立好的 学生信息 表,它包含四个字段:学号,姓名,年龄,生日 以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,更改其年龄,保存到数据库。 [cpp] view plaincopy
(5) 关闭记录集与连接 记录集或连接都可以用Close()方法来关闭 m_pRecordset->Close(); //关闭记录集 m_pConnection->Close(); //关闭连接 (6) 错误的获取 在stdafx.h中进行宏定义: [cpp] view plaincopy
使用方法: |
|