IRowsetPosition::GetRecordCount
GetRecordCount では、現在の行セットの行数が取得されます。
構文
HRESULT IRowsetPosition::GetRecordCount(ULONG * pcRows,);
パラメーター
- pcRows
[in/out] 符号なし long 型の値へのポインタ。この long 型の値はクライアントによって割り当てられる必要があります。
戻り値
S_OK
メソッドが成功しました。E_INVALIDARG
pcRows は NULL でした。E_UNEXPECTED
行セットはゾンビ状態です。
説明
これは、行セット内の正確なレコード数です。
次の例は、SQL Server データベースに対して "SELECT * FROM Prices" を実行し、その結果返された行セットの行数を IRowsetPosition::GetRecordCount を使用してカウントする方法を示しています。
使用例
//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;