当前位置: 首页 > ops >正文

ADO编程-RecordSet对象

ADO编程-RecordSet对象

标签(空格分隔): 数据库


在ADO程序中,记录集(Recordset)对象代表一个表的记录集合或者是一个SQL命令或存储过程执行结果。简单地说:记录集实际上缓存了从数据库获得的记录,应用程序可以从记录集中获得每条记录的字段。

Recordset对象的常用属性和方法:

RecordCount属性:返回Recordset对象中记录的当前数目

BOF,EOF属性:BOF指示当前记录位置的第一记录的前一个,EOF指示当前记录的最后一个记录的后一个。如果打开没有记录的Recordset对象,则BOF,EOF都为true,如果打开的记录集中包含记录,则BOF,EOF都为false

AbsolutePosition属性:指定Recordset对象当前记录的序号位置

ActiveConnection属性:该属性指定Recordset当前所属的Connection对象。

Open方法定义:

HRESULT Open (const _variant_t &Source,  
const _variant_t &ActiveConnection,  
enum CursorTypeEnum CursorType,  
enum LockTypeEnum LockType,  
long Options)  

Source参数:为记录源,它可以是下列内容之一:Command对象变量,SQL语句,存储过程,表名或完整的路径名。
ActiveConnection参数:对应于ActiveConnection属性,指定在哪个连接中打开该记录集

CursorType参数:指定打开Recordset时使用的游标
其定义如下

CursorTypeEnum
{adOpenUnspecified = -1, //不指定游标adOpenForwardOnly = 0,  //默认,前向游标。只能在Recordset的记录中向前移动,但速度最快。adOpenKeyset = 1, //键集游标,可以在Recordset中任意移动,其他用户所做的记录修改可见,但其他用户添加的记录不可见,删除的记录字段值不能被使用。adOpenDynamic = 2, //动态游标,可以在Recordset中任意移动,其他用户增、删、改的记录都可见,但速度最慢。adOpenStatic = 3 //静态游标,可以在Recordset中任意移动,其他用户增、删、改的记录都不可见。
};

LockType参数:指定打开记录集时应该使用的锁定类型,它的取值为

LockTypeEnum
{adLockUnspecified = -1,adLockReadOnly = 1,     //recordset的记录为只读adLockPessimistic = 2,  //只要保持Recordset为打开,别人就无法编辑该记录集中的记录.adLockOptimistic = 3,   //当update recordset中的记录时,将记录加锁(常用)adLockBatchOptimistic = 4   //以批模式时更新记录时加锁
};

Options参数:该参数类型为长整型值,指定source传递命令的类型

CommandTypeEnum
{adCmdUnspecified = -1,adCmdUnknown = 8,        //未知类型adCmdText = 1,          //SQL语句adCmdTable = 2,         //数据表的名字adCmdStoredProc = 4,    //存储过程adCmdFile = 256,        //文件adCmdTableDirect = 512
};

MoveFirst,MoveLast,MoveNext,MovePrevious方法:这些方法可以对记录集的游标进行移动操作

GetCollect方法:用于取得字段的值,参数Index可以是字符串表明字段名,也可以是整型数,表示字段的序号。

_variant_t  GetCollect(const _variant_t &Index);

PutColloct方法:用于向记录字段中写入值,pvar参数表示要写入的变量值

void PutCollect (const _variant_t &Index,const _variant_t &pvar);

AddNew()方法:使用该方法创建和初始化新记录,该方法可以使用参数,在参数中指定要添加的新纪录,也可以不使用参数,而在后面使用PutCollect方法修改新记录,使用Update函数保存新纪录

Update()方法:该方法保存从调用AddNew方法以来或更改现有记录中的任何字段值以来所做的所有更改。

使用记录集的具体方法:

定义_RecordsetPtr型变量,然后通过它调用Recordset对象的Open方法,即可打开一个数据集,然后可以使用GetCollet方法获取记录的字段值,使用Move系列函数实现记录集的遍历,最后关闭记录集。

用例

#include "stdafx.h"
#include "DataBase.h"#import "C:\Program Files\Common Files\system\ado\msado15.dll" \
no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF")int main()
{::CoInitialize(NULL);_ConnectionPtr  m_pConnection;_RecordsetPtr   m_pRecordSet;try{m_pConnection.CreateInstance(__uuidof(Connection));m_pRecordSet.CreateInstance(__uuidof(Recordset));assert(NULL != m_pConnection);assert(NULL != m_pRecordSet);if (NULL == m_pRecordSet|| NULL == m_pConnection){cout << "创建实例失败" << endl;return -1;}m_pConnection->CommandTimeout = 5;m_pConnection->ConnectionString = "Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa;Initial Catalog=sample_db;Data Source=127.0.0.1";m_pConnection->Open("","", "", adConnectUnspecified);assert(m_pConnection->GetState() == adStateOpen);if (m_pConnection->GetState() != adStateOpen){cout << "连接失败" << endl;}//打开AccountsInfo表m_pRecordSet->Open("AccountsInfo", m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdTable);assert(m_pRecordSet->GetState() == adStateOpen);if ( m_pRecordSet->GetState() != adStateOpen){cout << "打开记录失败" << endl;return 0;}//获取数据long nCount = m_pRecordSet->GetRecordCount();cout << "nRecordCount : " << nCount << endl;nCount =  m_pRecordSet->Fields->GetCount();cout << "nRecordCount : " << nCount << endl;while (!m_pRecordSet->GetadoEOF()){string szName = (_bstr_t)m_pRecordSet->GetCollect("NickName");cout << szName << endl;m_pRecordSet->MoveNext();}//添加记录m_pRecordSet->AddNew();m_pRecordSet->PutCollect("LogonID", "12345610");m_pRecordSet->PutCollect("NickName", "东东");m_pRecordSet->PutCollect("LogonPass", "123456");m_pRecordSet->PutCollect("Sex", "0");m_pRecordSet->Update();}catch (_com_error& e){cout << e.Description() << endl;}::CoUninitialize();return 0;
}
http://www.xdnf.cn/news/11763.html

相关文章:

  • Java 移位操作
  • 高质量C++编程
  • 冯·诺依曼结构
  • SharePoint 2010 -- 常用技巧及方法总结
  • WCDMA网信道解释
  • Unable to find a version of the runtime to run this application解决方法
  • g100显卡 linux驱动,nvidia geforce g100驱动
  • Windows平台Ring3下DLL注入(HOOK)方法整理汇总
  • 安装Quartus_II_9.0
  • 最全整理反面角色谁更适合饰演老大角色,你认识多少?(已收藏)
  • 冰点还原标准版-中文版(全面支持Windows 7)7.0.020.3172(最新版)下载与注册
  • 最新民间偏方大全,个人收集整理,绝对值得收藏
  • 塞班时代JAVA_回忆S60(塞班)年代的JAVA游戏:有没有哪一款是你在课堂偷偷玩的...
  • 夏目友人帐所有妖怪名单
  • 大话运维-IT国产化浪潮下的运维管理
  • 记一次msyql InnoDB导致数据库崩溃,数据库重启失败的问题
  • 学习OpenCV:滤镜系列(15)——羽化(模糊边缘)
  • 服务硬件及RAID配置
  • flowchart流程图编程语言下载_C语言流程图生成工具(AutoFlowchart)
  • 【Python爬虫与数据分析】爬虫代理IP与访问控制
  • 完整版搭建hadoop集群
  • 有关嵌入式、单片机、51单片机、STM32、的一些概念详解
  • 解决系统缺少找不到zipfldr.dll文件的问题
  • 酷盘 文件服务器,酷盘是什么 酷盘怎么使用【使用方法】
  • 五款免费pdf转换成word软件
  • python交易是什么意思_py交易什么梗?起源及流行原因
  • HTML简洁大气带进度条的URL跳转页面源码
  • 应用开放平台 (Open Platform)
  • dedecms织梦去除版权powered by dedecms方法
  • 解决NVIDIA软件或驱动安装包出错