CBulkRowset 类
通过使用单次调用检索多个行句柄,提取并操作行以批量处理数据。
语法
template <class TAccessor>
class CBulkRowset : public CRowset<TAccessor>
参数
TAccessor
一个访问器类。
要求
标头: atldbcli.h
成员
方法
名称 | 描述 |
---|---|
AddRefRows | 递增引用计数。 |
CBulkRowset | 构造函数。 |
MoveFirst | 检索第一行数据,必要时进行新的批量提取。 |
MoveFirst | 移动到最后一行。 |
MoveNext | 检索下一行数据。 |
MovePrev | 移动到上一行。 |
MoveToBookmark | 提取用书签标记的行或距离该书签指定偏移量的行。 |
MoveToRatio | 从行集中的分数位置开始提取行。 |
ReleaseRows | 将当前行 (m_nCurrentRow ) 设置为 0 并释放所有行。 |
SetRows | 设置一次调用要检索的行句柄数量。 |
示例
以下示例演示 CBulkRowset
类的用法。
class CCustomerData
{
public:
char m_szField1[50];
BEGIN_COLUMN_MAP(CCustomerData)
COLUMN_ENTRY(1, m_szField1)
END_COLUMN_MAP()
};
void DoCBulkRowsetTest()
{
CoInitialize(NULL);
CCommand<CAccessor<CCustomerData>, CBulkRowset > cmd;
CDataSource ds;
// Open up data link dialogs to create a data source
ds.Open();
CSession session;
session.Open(ds);
// Could call SetRows() here if you want to fetch
// more than 10 HROWs at a time.
cmd.Open(session, L"Select * from customer");
cmd.MoveFirst();
// Note that the CBulkRowset by default fetched 10 HROWs at a time
// so that the MoveNext call will not have to make the GetNextRows
// call to get the second HROW because it has already been fetched
//by the MoveFirst() call above.
cmd.MoveNext();
cmd.Close();
session.Close();
ds.Close();
}
CBulkRowset::AddRefRows
调用 IRowset::AddRefRows 以递增当前从 BULK 行集中检索到的所有行的引用计数。
语法
HRESULT AddRefRows() throw();
返回值
标准 HRESULT。
CBulkRowset::CBulkRowset
创建一个新的 CBulkRowset
对象并将默认行数设置为 10。
语法
CBulkRowset();
CBulkRowset::MoveFirst
检索第一行数据。
语法
HRESULT MoveFirst() throw();
返回值
标准 HRESULT。
CBulkRowset::MoveLast
移动到最后一行。
语法
HRESULT MoveLast() throw();
返回值
标准 HRESULT。
CBulkRowset::MoveNext
检索下一行数据。
语法
HRESULT MoveNext() throw();
返回值
标准 HRESULT。 到达行集末尾时,返回 DB_S_ENDOFROWSET。
CBulkRowset::MovePrev
移动到上一行。
语法
HRESULT MovePrev() throw();
返回值
标准 HRESULT。
CBulkRowset::MoveToBookmark
提取用书签标记的行或距离该书签指定偏移量 (lSkip) 的行。
语法
HRESULT MoveToBookmark(const CBookmarkBase& bookmark,
DBCOUNTITEM lSkip = 0) throw();
参数
bookmark
[in] 标记要从其提取数据的位置的书签。
lSkip
[in] 从书签到目标行的行数。 如果 lSkip 为 0,则提取的第一行是添加了书签的行。 如果 lSkip 为 1,则提取的第一行是位于添加了书签的行后面的行。 如果 lSkip 为 -1,则提取的第一行是位于添加了书签的行前面的行。
返回值
请参阅 OLE DB 程序员参考中的 IRowset::GetData。
CBulkRowset::MoveToRatio
从行集中的分数位置开始提取行。
语法
HRESULT MoveToRatio(DBCOUNTITEM nNumerator,
DBCOUNTITEM nDenominator)throw();
参数
nNumerator
[in] 用于确定从中提取数据的分数位置的分子。
nDenominator
[in] 用于确定从中提取数据的分数位置的分母。
返回值
标准 HRESULT。
备注
MoveToRatio
大致按以下公式提取行:
(nNumerator * RowsetSize ) / nDenominator
其中 RowsetSize
是行集的大小(以行为单位)。 此公式的准确性取决于具体的提供程序。 有关详细信息,请参阅 OLE DB 程序员参考中的 IRowsetScroll::GetRowsAtRatio。
CBulkRowset::ReleaseRows
调用 IRowset::ReleaseRows 以递减当前从 BULK 行集中检索到的所有行的引用计数。
语法
HRESULT ReleaseRows() throw();
返回值
标准 HRESULT。
CBulkRowset::SetRows
设置每个调用检索的行句柄数量。
语法
void SetRows(DBROWCOUNT nRows) throw();
参数
nRows
[in] 行集的新大小(行数)。
备注
如果调用此函数,则它必须在行集之前打开。