IRowsetPosition::GetRecordCount
GetRecordCount recupera el número de filas del conjunto de filas actual.
Sintaxis
HRESULT IRowsetPosition::GetRecordCount(ULONG * pcRows,);
Parámetros
- pcRows
[in/out] Puntero a un valor long sin signo. Este valor long lo debe asignar el cliente.
Valor devuelto
S_OK
El método se ejecutó correctamente.E_INVALIDARG
El valor de pcRows era NULL.E_UNEXPECTED
El conjunto de filas se encuentra en un estado inerte.
Comentarios
Es un recuento exacto del número de registros del conjunto de filas.
El siguiente ejemplo muestra el uso de IRowsetPosition::GetRecordCount para contar el número de filas del conjunto de filas que se devuelve cuando se ejecuta "SELECT * FROM Prices" en una base de datos de SQL Server.
Ejemplo
//Declarations
HRESULT hr = NOERROR;
DBPROPSET dbpropset[1];
DBPROP dbprop[1];
DBPROPSET rowsetpropset[1];
DBPROP rowsetprop[2];
ULONG cbRecordCount;
// Provider interfaces
IDBProperties * pIDBProperties = NULL;
IDBInitialize * pIDBInitialize = NULL;
IDBCreateSession * pIDBCreateSession = NULL;
IRowsetPosition * pIRowsetPos = NULL;
ICommandProperties * pICmdProps = NULL;
IDBCreateCommand * pIDBCrtCmd = NULL;
ICommandText * pICmdText = NULL;
IRowset * pIRowset = NULL;
// Initialize the environment.
hr = CoCreateInstance(CLSID_SQLSERVERCE, 0, CLSCTX_INPROC_SERVER,
IID_IDBInitialize, (void**) &pIDBInitialize);
if (FAILED(hr))
{
//Send an error-specific message and do error handling.
goto Exit;
}
// Initialize property structures
VariantInit(&dbprop[0].vValue);
// Initialize the property with the name of database.
dbprop[0].dwPropertyID = DBPROP_INIT_DATASOURCE;
dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
dbprop[0].vValue.vt = VT_BSTR;
dbprop[0].vValue.bstrVal = SysAllocString(L"\\Windows\\Aworks.sdf");
if(!(dbprop[0].vValue.bstrVal))
{
hr = E_OUTOFMEMORY;
goto Exit;
}
// Initialize the property set.
dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
dbpropset[0].rgProperties = dbprop;
dbpropset[0].cProperties = sizeof(dbprop)/sizeof(dbprop[0]);
// Set the properties into the provider's data source object.
pIDBInitialize->QueryInterface(IID_IDBProperties,(void**)&pIDBProperties);
hr = pIDBProperties->SetProperties(sizeof(dbpropset)/sizeof(dbpropset[0]),
dbpropset);
if(FAILED(hr))
{
goto Exit;
}
// Initialize the data source.
hr = pIDBInitialize->Initialize();
if(FAILED(hr))
{
goto Exit;
}
// Create the Session and Command objects.
hr = pIDBProperties->QueryInterface(IID_IDBCreateSession, (void **)
&pIDBCreateSession);
if (FAILED(hr))
{
//Send an error-specific message and do error handling.
goto Exit;
}
hr = pIDBCreateSession->CreateSession(NULL, IID_IDBCreateCommand,
(IUnknown**) &pIDBCrtCmd);
if (FAILED(hr))
{
//Send an error-specific message and do error handling.
goto Exit;
}
hr = pIDBCrtCmd->CreateCommand(NULL, IID_ICommandText, (IUnknown**)
&pICmdText);
if (FAILED(hr))
{
//Send an error-specific message and do error handling.
goto Exit;
}
// Request the ability to use the IRowsetPosition interface.
rowsetpropset[0].cProperties = 1;
rowsetpropset[0].guidPropertySet = DBPROPSET_ROWSET;
rowsetpropset[0].rgProperties = rowsetprop;
rowsetprop[0].dwPropertyID = DBPROP_CANFETCHBACKWARDS;
rowsetprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
rowsetprop[0].vValue.vt = VT_BOOL;
rowsetprop[0].vValue.boolVal = VARIANT_TRUE;
// Set the query text for the command.
hr = pICmdText->SetCommandText(DBGUID_SQL, L"Select * from Prices");
if (FAILED(hr))
{
//Send an error-specific message and do error handling.
goto Exit;
}
hr = pICmdText->QueryInterface(IID_ICommandProperties, (void**) &pICmdProps);
if (FAILED(hr))
{
//Send an error-specific message and do error handling.
goto Exit;
}
hr = pICmdProps->SetProperties(1, rowsetpropset);
if (FAILED(hr))
{
//Send an error-specific message and do error handling.
goto Exit;
}
// Creates an IRowsetPosition object for the returned rowset.
hr = pICmdText->Execute(NULL, IID_IRowsetPosition, NULL, NULL,
(IUnknown**)&pIRowsetPos);
if (FAILED(hr))
{
//Send an error-specific message and do error handling.
goto Exit;
} // Get a count of the number or rows returned in the rowset.
hr = pIRowsetPos->GetRecordCount(DB_NULL_HCHAPTER, &cbRecordCount);
if (FAILED(hr))
{
//Send an error-specific message and do error handling.
goto Exit;
}
// Do something here with the aquired row count information.
Exit:
// When finished, clear the properties arrays, release
// the interfaces and uninitialize the environment.
return;