ADO与OLEDB中与ODBC API SQLFetch对应的可以一次取多行到绑定空间的接口与方法是什么?

drhenry 2003-09-28 09:58:08
使用ODBC可以用如下属性指定用SQLFetch一次获取的行数
SQLSetStmtAttr(hstmtMain, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER*)1000, SQL_IS_UINTEGER);
for(...)
{
SQLBindCol(hstmtMain,........);
}
SQLFetch(hstmtMain);
----------------------------------------
ADO中与此对应的可以一次取多行到绑定内存的接口与方法是什么
OLEDB中与此对应的可以一次取多行到绑定内存的接口与方法是什么
...全文
50 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxfBrave 2003-09-28
  • 打赏
  • 举报
回复
try
{
HRESULT hr;
_RecordsetPtr pRecordset;
_CommandPtr pCmd;

// Creates command to execute stored procedure
hr = pCmd.CreateInstance(__uuidof(Command));
if (FAILED(hr)) ASSERT(FALSE);

pCmd->PutRefActiveConnection(m_pConnection);

hr = pCmd->put_CommandText(_bstr_t("SELECT * from mmas98.monitorobjects"));
if (FAILED(hr)) ASSERT(FALSE);

// Executes the command
pRecordset = pCmd->Execute(&vtEmpty, &vtEmpty2, adCmdText);

if (pRecordset->EOF == VARIANT_TRUE)
return TRUE;

// Fetches the rows

_variant_t varRows = pRecordset->GetRows(adGetRowsRest);
long lNumRecords = 0;
SafeArrayGetUBound(varRows.parray, 2, &lNumRecords);

_variant_t varField;
long lIndex[2];

for (lIndex[1] = 0; lIndex[1] <= lNumRecords; lIndex[1]++)
{
// Column 2 'typeID'

lIndex[0] = 2;

hr = SafeArrayGetElement(varRows.parray, &lIndex[0], &varField);
if (FAILED(hr))
ASSERT(FALSE);

int nType = (int)varField.lVal;
if (nType == -1)
continue;

pNewObj = CreateObject(nType);
if (pNewObj == NULL)
continue;

pNewObj->m_nType = nType;

varField.Clear();

// Column 0 'objname'

lIndex[0] = 0;

hr = SafeArrayGetElement(varRows.parray, &lIndex[0], &varField);
if (FAILED(hr))
ASSERT(FALSE);

pNewObj->m_strName = (TCHAR *)(_bstr_t)varField;
pNewObj->m_strName.MakeUpper();

varField.Clear();

// Column 1 'objectID'

lIndex[0] = 1;

hr = SafeArrayGetElement(varRows.parray, &lIndex[0], &varField);
if (FAILED(hr))
ASSERT(FALSE);

if (!Variant2GUID(varField, &pNewObj->m_id))
ASSERT(FALSE);

varField.Clear();

// Column 3 'containerID'

lIndex[0] = 3;

hr = SafeArrayGetElement(varRows.parray, &lIndex[0], &varField);
if (FAILED(hr))
ASSERT(FALSE);

// Don't check return value: Field 'containerID' can be NULL
Variant2GUID(varField, &pNewObj->m_containerID);

varField.Clear();

AddObject(pNewObj);

pNewObj = NULL;
}

pRecordset->Close();
}
catch(_com_error& err)
{
if (pNewObj != NULL)
delete pNewObj;

pNewObj = NULL;

AfxMessageBox("读取数据库失败," + err.Description());

return TRUE;
}

ADO方式读取数据库的例子
AkiraChing 2003-09-28
  • 打赏
  • 举报
回复
msdn上面有例子的
ado:
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/ado270/htm/mdaexamples_vc03_2.htm
oledb:
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/oledb/htm/olprchapter06_11.htm

请在Microsoft Visual Studio .NET 2003 文档的地址栏输入上面的连接。

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧