WEB开发网
开发学院软件开发VC 使用ADO封装类的数据库程序开发实例(上) 阅读

使用ADO封装类的数据库程序开发实例(上)

 2008-04-19 20:27:57 来源:WEB开发网   
核心提示:四、了解ADO记录集创建了ADO连接,我们就可以通过ADO记录集来访问数据库了.同样,使用ADO封装类的数据库程序开发实例(上)(2),在使用记录集之前要先创建对象.然后调用Open方法打开记录集.它不但可以执行普通的SQL语句,还可以调用存储过程等等:Open(VARIANT Source, VARIANT Acti

四、了解ADO记录集

创建了ADO连接,我们就可以通过ADO记录集来访问数据库了.同样,在使用记录集之前要先创建对象.然后调用Open方法打开记录集.它不但可以执行普通的SQL语句,还可以调用存储过程等等:

Open(VARIANT Source, VARIANT ActiveConnection, CursorTypeEnum CursorType,LockTypeEnum LockType, LONG Options).

其中ActiveConnection参数为一个有效的 Connection 对象名,就是我们在上面所说过的ADO连接对象.

CursorType参数指的是记录集光标类型,在官方的资料中是这样说明它的取值类型的:

1.adOpenForwardOnly 仅向前游标,默认值。除了只能在记录中向前滚动外,与静态游标相同。当只需要在记录集中单向移动时,使用它可提高性能。

2.adOpenKeyset 键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。

3.adOpenDynamic 动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。

4.adOpenStatic 静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。

我们现在可不用管这么多,就用默认的adOpenStatic类型吧.

LockType参数,用于指示在什么时候锁定记录:

AdLockReadOnly (默认值)只读 - 不能改变数据。

AdLockPessimistic 保守式锁定(逐个) - 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录。

AdLockOptimistic 开放式锁定(逐个) - 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。

AdLockBatchOptimistic 开放式批更新-用于批更新模式(与立即更新模式相对)。

Options参数指的是操作类型:

adCmdText 指示strSQL为命令文本, 即普通的SQL语句.

adCmdTable 指示ADO生成SQL查询以便从在strSQL中命名的表中返回所有行.

adCmdTableDirect 指示所作的更改在strSQL中命名的表中返回所有行.

adCmdStoredProc 指示strSQL为存储过程.

adCmdUnknown 指示strSQL参数中的命令类型为未知

adCmdFile 指示应从在strSQL中命名的文件中恢复保留(保存的)Recordset.

adAsyncExecute 指示应异步执行strSQL.

adAsyncFetch 指示在提取 Initial Fetch Size 属性中指定的初始数量后,应该异步提取所有剩余的行.如果所需的行尚未提取,主要的线程将被堵塞直到行重新可用.

adAsyncFetchNonBlocking 指示主要线程在提取期间从未堵塞. 如果所请求的行尚未提取,当前行自动移到文件末尾.

唉又是一大串,如果你只是要执行SQL语句,就把它设为adCmdText吧. 这样Source就是你要执行的SQL语句了.

例如:

LPCSTR strSQL = "select * from vckbasetable";
_RecordsetPtr pRecordset;
pRecordset.CreateInstance("ADODB.Recordset");
pRecordset->Open(_bstr_t(strSQL),
  _variant_t((IDispatch*)pConnection, true),
  adOpenStatic,
  AdLockOptimistic ,
  adCmdText);

ADO中读取记录集中指定字段的值一般有两种方法:

第一种:

FieldsPtr pFields;
pRecordset->get_Fields(&pFields);
pFields->Item[L"COLUMN_NAME"]->Value;
//或pFields->Item[long(index)]->Value;
//其中index为整型或长整型.GetFields()函数返回的是记录集对象的字段集合对象的指针.
第二种:pRecordset->get_Collect("COLUMN_NAME");
//或pRecordset->get_Collect(long(index));

它们都将返回一个_variant_t类型的值,推荐使用后一种方法.

例如:

int ncol = rset.GetFieldsCount();
while (!rset.IsEOF())
{
  for (int i = 0; i < ncol; i++)
  {
    rset.GetValueString(value, (long)(i));
  }
  rset.MoveNext();
}

四、了解ADO字段.

一个记录集通常包含多个字段,通过访问记录,我们可以得到很多有用的信息,如字段名,字段的数据类型,定义的宽度,实际占有的宽度等等:

一般用记录集的get_Fields方法取得字段集合对象:

FieldsPtr pFields;
Recordset->get_Fields(&pFields);

然后可以获得相应的字段对象:

long lIndex = 0;
FieldPtr pf = pFields->GetItem(_variant_t(lIndex));
//或: FieldPtr pf = pFields->GetItem("COLUMN_NAME");

字段对象有很多有用的属性,这些可以参考我的源代码或其他相关资料.如:

get_ActualSize(long *pl) //实际宽度
get_Attributes(long *pl) //属性
get_DefinedSize(long *pl) //定义宽度(以字节为单位,如整型为4,长整型为8...)
get_Name(BSTR *pbstr)   //字段名
get_Type(DataTypeEnum *pDataType) //数据类型
get_Value(VARIANT *pvar) // 字段的值

有了以上对ADO的基本了解后,我们将正式开始编写应用程序,请看下文。

上一页  1 2 

Tags:使用 ADO 封装

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接