一、ADO模型常用三个对象
连接对象Connection
通过连接可以从应用程序中访问数据源。连接时必须指定要连接的数据源以及连接所使用的用户名和用户口令。
命令对象Command
可以通过已建立的连接发出命令,从而对数据源进行指定操作。一般情况下,命令可
以在数据源中添加、修改或删除数据,也可以检索数据。
记录集对象Recordset
查询命令可以将查询结果储存在本地,这些数据以行为单位,返回数据的集合被称为
记录集
ADO 模型中常用的对象为Connection 对象、Command 对象、Recordset 对象。在使用
这 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程序将得到很大的方便。在后面的例子中,将介绍它们的使用方法。
三、
1。当初始化 COM 环境后,就可以创建与数据库的连接。建立数据库的连接需要使用连接对象Connection。
2。利用 ADO 查询数据库的记录,需要使用记录集对象 Recordset。首先定义一个_RecordsetPtr 类型的指针
3。利用Open 方法打开记录集之后,就可以遍历打开的记录集和获取记录集中的字段值。
遍历记录的时候,利用adoEOF( )函数判断记录集是否到达末尾,如果没有,可以继续访问
记录集,否则退出While 循环。
4。ADO 技术提供了三种添加记录的方法,一是使用连接对象的Execute 方法,二是使用
命令对象的Execute 方法,三是使用记录集对象的AddNew 方法。
5。与添加记录一样,既可以使用连接对象的Execute 方法,也可以使用命令对象的Execute
方法,还可以使用记录集对象进行操作来修改记录,下面重点介绍使用记录集对象修改记
录的方法和步骤。
首先打开记录集,然后修改记录集中的相应的字段值,最后调用Update 方法,将修改
后的数据更新到数据库中。
6。与数据库建立连接成功后,需要对数据库进行操作,比如,添加记录、更新记录、删除记录、查询记录,
可以用连接对象Connection 的指针进行操作~但是更方便的是用记录集RecordSet的指针m_pRecordSet,推荐用m_pRecordSet对数据库进行操作~~
(因为记录集对象本身就是用来和数据表中的各条记录打交道的,所以用记录集操作数据表更方便)
四、常用ADO编程函数
1.创建三个常用对象的函数CreateInstance,eg:
m_pConnection.CreateInstance(__uuidof(Connection))
m_pRecordset.CreateInstance(__uuidof(Recordset))
2.连接对象中与数据库建立连接的Open函数,
hr = m_pConnection->Open("Provider=SQLOLEDB.1;\
Integrated Security=SSPI;\
Initial Catalog=test1;\
Persist Security Info=False;\
Data Source=(local)","","",adModeUnknown);
3.打开数据库(读取记录)的Open函数,
m_pRecordSet->Open("SELECT * FROM mytable", m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdUnknown);
4.打开数据记录(执行SQL语句,同上面的3)的Execute函数,
_bstr_t strCmd="SELECT * FROM [user]";
m_pRecordset=m_pConnection->Execute(strCmd,&RecordsAffected,adCmdText)
5.利用m_pRecordset,可以对数据库进行很多操作~~
(1)if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst(); // 判断数据表是否为空~~
(2)m_pRecordset->MoveFirst()可以将指针移动到第一条记录
(3)m_pRecordset->MoveNext()可以将指针往下移动一项
(4)m_pRecordset->MovePrevious()可以将指针往前移动一项
(5)while (!m_pRecordset->adoEOF) 可以一直读取记录,直到最后一条记录
(6)m_pRecordset->GetCollect("name") 获取某一条记录中,属性为"name"这一列的数据(即,某个人的姓名)
(7)m_pRecordset->AddNew()该函数是让数据表添加一新行,只有添加完新行支行,再调用Putcollect()才能把数据写入
(8)m_pRecordset->PutCollect("name",_bstr_t(m_name)) 和第(6)条刚好相反,这里是从编辑框中获取数据,然后写入到数据表某一列中
(9)m_pRecordset->Update() 写入数据之后,要更新一下
(10)m_pRecordset->MoveLast() 移动到数据表中最后一条记录
(11)m_pRecordset->Close() 关闭记录集
(12)m_pRecordset->Move(cursel) 将记录集移动到光标所指的位置
五、增删改查常用函数
1.查询的时候用到 GetCollect 函数,
2.增加记录的时候 用 AddNew() PutCollect() Update()
m_pRecordset->AddNew(); //用这种方法添加数据就必须用open 语句执行SQL语句
m_pRecordset->PutCollect("name", _variant_t(m_Name));
m_pRecordset->PutCollect("age", atol(m_Age));
m_pRecordset->Update();
m_pRecordset->Close();
3.修改记录的时候用Move() putCollect() Update()
m_pRecordset->Move(cursel);
m_pRecordset->PutCollect("name", _variant_t(m_Name));
m_pRecordset->PutCollect("age", atol(m_Age));
m_pRecordset->Update();
4.删除记录的时候用Move() Delete() Update()
m_pRecordset->MoveFirst();
m_pRecordset->Move(cursel);
m_pRecordset->Delete(adAffectCurrent); //参数adAffectCurrent为删除当前记录
m_pRecordset->Update();
m_pRecordset->Close();
六、几个函数用法的区别
m_pRecordset->Open("操作字符串"……) 这个可以打开可编辑的记录集,即,增删改查都可以用。
m_pConnection->Execute("操作字符串"……) 是只读的记录集,即只能执行查询操作~~函数的返回值就是只读的_RecordsetPtr
m_pConnection->Open("操作字符串"……) 这个打开数据库连接,所有的数据库操作都是建立在数据库连接上的。