ADO 数据库开发技术一些小知识

一、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("操作字符串"……) 这个打开数据库连接,所有的数据库操作都是建立在数据库连接上的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值