ADO接口中_RecordsetPtr的使用说明
来源:互联网 发布:人工智能老师 编辑:程序博客网 时间:2024/05/22 14:02
RecordsetPtr智能指针,它是专门为通过记录集操作数据库而设立的指针,通过该接口可以对数据库的表内的记录、字段等进行各种操作。
要搞清楚:数据库和ADO的记录集是两个不同的概念,是存在于不同物理位置的两个存储空间。
记录集相当于是实际数据的一份拷贝。 正因为记录集是相对脱离数据库而存在的, 所以才存在后面将要介绍的Open方法中涉及的光标类型和锁定类型这两个问题。
_RecordsetPtr接口的使用方法
1> 创建记录集对象
创建记录集对象,只是为它分配内存空间,记录集中不含任何数据。
2> 打开记录集
记录集对象是用来获得数据库中的数据并对其操作的,所以还要打开记录集,从数据库中取得数据记录。可有多种方法打开记录集,如使用_CommondPt::.Execute()来返回一个记录集,或是用_Recordset::Open()方法来打开一个记录集;
下面只介绍Open()方法:
函数原型为:
HRESULT Recordset::Open(const _variant_t& Source,const _variant_t& ActiveConnection,enum CursorTypeEnum CursorType,enum LockTypeEnum LockType,long Options)
参数:
Source是数据查询字符串;
ActiveConnection是已经建立好的连接(我们需要用Connection对象指针来构造一个_variant_t对象);
CursorType 光标类型,它是枚举CursorTypeEnum中的一个值;
LockType 锁定类型 它是枚举LockTypeEnum中的一个值;
Options 指定Source的类型;
光标类型CursorType,可取如下值之一:
adOpenUnspecified=-1 不作特别指定
adOpenForwardOnly=0 默认值,前滚静态光标。(这种光标只能向前浏览记录集,比如用MoveNext向前滚动,这种方式可节省资源,提高浏览速度,但诸如BookMark、RecordCount、AbsolutePosition、AbsolutePage都不能使用。)
adOpenKeyset=1 键集游标,采用这种光标的记录集看不到其它用户的新增、删除操作,但对于更新原有记录的操作对你是可见的。
adOpenDynamic=2 动态光标,所有数据库的操作都会立即在用户记录集上反应出来。
adOpenStatic=3 静态游标。它为记录产生一个静态备份,其他用户的新增、删除、更新操作对你的记录集来说是不可见的。
LockType锁定类型,它可以是以下值之一,请看如下枚举结构
关于光标和锁定类型,对于一般用户,建议您只作简单了解,后面将进一步进行解说。Options可以取如下值之一:
adCmdText: 表明CommandText是文本命令。
adCmdTable:表明CommandText是一个表名。
adCmdProc:表明CommandText是一个存储过程。
adCmdUnknown:未知。
例如:假设m_pConnection是我们已经建立好的连接,我们使用_RecordsetPtr接口的Open方法打开Employees表的记录集的语句如下:
3> 指针的移动
移动记录指针可以通过MoveFirst()方法移动到第一条记录,MoveLast()方法移动到最后一条记录,MovePrevious()方法移动到当前记录的前一条记录,MoveNext()方法移动到当前记录的下一条记录。也可以使用Move(记录号)移动记录指针到需要位置。
注意:Move()方法是相对于当前记录来移动指针位置的。正值向后移动,负值向前移动。如Move(3),当前记录是3时,它将从记录3开始往后再移动3条记录位置。
两个_RecordsetPtr属性:
BOF 属性表示记录集第一条记录之前的游标,用来判断记录集是否为空
EOF(通常会rename为adoEOF) 属性表示记录集最后一条记录之后的游标,用来判断是否结束
4> 数据的读取GetCollect(字段名)来获取当前记录指针所指的字段值
返回值的类型为:_variant_t
5> 数据的更新
用PutCollect(字段名,值)将新值写入,并Update()更新到数据库
6> 插入记录
先移动记录指针到要插入的位置,用AddNew()插入一条记录,然后用PutCollect(字段名,值)写入值,最后用Update()更新到数据库;
7> 删除记录
删除单条记录:先移动记录指针到合适的位置,然后用Delete()方法删除它(取参数adAffectCurrent,表示操作只影响当前的记录),并用Update()来更新数据库;
8> 关闭记录集
直接用Close()方法关闭记录集并赋予其空值。代码如下:
m_pRecordset->Close();
m_pRecordset=NULL;
类似于_ConnectionPtr的关闭方法;
- ADO接口中_RecordsetPtr的使用说明
- ADO中_RecordsetPtr的使用
- ADO接口之_RecordsetPtr
- ADO接口之_RecordsetPtr
- ADO-- _RecordsetPtr的用法
- ADO:_RecordsetPtr
- ADO中关于SafeArray的使用说明
- ADO:_ConnectionPtr,_RecordsetPtr,_CommandPtr
- ADO日记:为什么_RecordsetPtr的RecordCount为-1
- ado 实现对db2数据库的数据插入 _RecordsetPtr
- ado _RecordsetPtr open 最可能的异常: Microsoft C++ exception
- VC++中通过ADO中的_RecordsetPtr操作数据库:增删改查
- VC++中通过ADO中的_RecordsetPtr操作数据库:增删改查
- VC++中通过ADO中的_RecordsetPtr操作数据库:增删改查
- VC++中通过ADO中的_RecordsetPtr操作数据库:增删改查
- VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法
- VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法
- VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法
- 了解ASP.NET MVC几种ActionResult的本质:JavaScriptResult & JsonResult
- 判断当前网络是否可用和调用系统设置wifi界面
- Java同步机制 synchronized
- permute -排列
- 优秀githup
- ADO接口中_RecordsetPtr的使用说明
- tomcat在eclipse中调试时,断点频繁停在threadpoolexecutor
- SpringAOP拦截Controller,Service实现日志管理(自定义注解的方式)
- 理解MySQL——索引与优化
- eclipse自动退出解决方法
- lastIndexOf、map
- Dx unsupported class file version 52.0 ...while parsing okio/AsyncTimeout.class
- 关于linux文件Blocks和Block size的一些解析
- 贪吃蛇汇编