Ado编程详解
主要的三大对象(智能指针)
_ ConnectionPtr, _CommandPtr , _RecordSetPtr
其实ConnectionPtr , CommandPtr ,RecordSetPtr 都可以执行Sql操作数据库
1._RecordSetPtr 详解
创建实例:
_RecordSetPtr recordPtr;
recordPtr.CreateInstance(__uuidof(RecordSet));
打开记录集
Open函数
函数原型:
Open (
const _variant_t & Source, //源(Sql语句,存储过程)
const _variant_t & ActiveConnection, //活动的连接
enum CursorTypeEnum CursorType,// 见下面
enum LockTypeEnum LockType, //见下面
long Options //见下面
)
参数三类型:
CursorTypeEnum的详解
enum CursorTypeEnum
{
adOpenUnspecified = -1,///不作特别指定
adOpenForwardOnly = 0,///前滚静态光标。这种光标只能向前浏览记录集,比如用MoveNext向前滚动,这
种方式可以提高浏览速度。但诸如BookMark,RecordCount,AbsolutePosition,AbsolutePage都不能使用
adOpenKeyset = 1,///采用这种光标的记录集看不到其它用户的新增、删除操作,但对于更新原有记录的
操作对你是可见的。
adOpenDynamic = 2,///动态光标。所有数据库的操作都会立即在各用户记录集上反应出来。
adOpenStatic = 3///静态光标。它为你的记录集产生一个静态备份,但其它用户的新增、删除、更新操
作对你的记录集来说是不可见的。
};
参数四:
LockType锁定类型,它可以是以下值之一,请看如下枚举结构:
enum LockTypeEnum
{
adLockUnspecified = -1,///未指定
adLockReadOnly = 1,///只读记录集
adLockPessimistic = 2,悲观锁定方式。数据在更新时锁定其它所有动作,这是最安全的锁定机制
adLockOptimistic = 3,乐观锁定方式。只有在你调用Update方法时才锁定记录。在此之前仍然可以做数
据的更新、插入、删除等动作
adLockBatchOptimistic = 4,乐观分批更新。编辑时记录不会锁定,更改、插入及删除是在批处理模式
下完成。
};
参数5:
.option可以取以下值
adCmdText:表明CommandText是文本命令
adCmdTable:表明CommandText是一个表名
adCmdProc:表明CommandText是一个存储过程
adCmdUnknown:未知
While(!_recordPtr->AdoEof)
{
_recordPtr->MoveNext();
}
获得列
m_pRecordset->GetFields()->GetItem((long)0).Value (通过列索引)
m_pRecordset->GetCollect("username"); (直接通过列名)
添加
m_pRecordSet->AddNew();
m_pRecordset->PutCollect("ID",_variant_t((long)(i+10)));
m_pRecordset->PutCollect("username",_variant_t("haiyan"));
m_pRecordset->PutCollect("old",_variant_t((long)71));
m_pRecordset->PutCollect("birthday",_variant_t("1930-3-15"));
m_pRecordSet->Update();
修改