プロバイダでのプロパティの参照
更新 : 2007 年 11 月
必要なプロパティのプロパティ グループとプロパティ ID を検索します。詳細については、『OLE DB Programmer's Reference』の「OLE DB Properties」を参照してください。
ここで説明するコードは、行セットからプロパティを取得する例です。セッションまたはコマンドを使用するコードは似ていますが、使用するインターフェイスは異なります。
プロパティ グループをコンストラクタへのパラメータとして使用して CDBPropSet オブジェクトを作成します。たとえば、次のようにします。
CDBPropSet propset(DBPROPSET_ROWSET);
AddProperty を呼び出します。このとき、プロパティに割り当てるプロパティ ID と値を渡します。値の型は使用するプロパティによって異なります。
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetChange, true);
propset.AddProperty(DBPROP_UPDATABILITY,
DBPROPVAL_UP_INSERT | DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_DELETE);
IRowset インターフェイスを使用して GetProperties を呼び出します。プロパティ セットをパラメータとして渡します。完成したコードを次に示します。
CAgentRowset<CMyProviderCommand>* pRowset = (CAgentRowset<CMyProviderCommand>*) pThis;
CComQIPtr<IRowsetInfo, &IID_IRowsetInfo> spRowsetProps = pRowset;
DBPROPIDSET set;
set.AddPropertyID(DBPROP_BOOKMARKS);
DBPROPSET* pPropSet = NULL;
ULONG ulPropSet = 0;
HRESULT hr;
if (spRowsetProps)
hr = spRowsetProps->GetProperties(1, &set, &ulPropSet, &pPropSet);
if (pPropSet)
{
CComVariant var = pPropSet->rgProperties[0].vValue;
CoTaskMemFree(pPropSet->rgProperties);
CoTaskMemFree(pPropSet);
if (SUCCEEDED(hr) && (var.boolVal == VARIANT_TRUE))
{
... // Use property here
}
}