📄 conversionproviderrs.cpp
字号:
// Implementation of the CConversionProviderCommand
#include "stdafx.h"
#include "SimpleDataObject.h"
#include "DataObjectRowset.h"
#include "IGetAsOLEDBRowset_i.c"
/////////////////////////////////////////////////////////////////////////////
// CConversionProviderCommand
HRESULT CConversionProviderCommand::Execute(
IUnknown *pUnkOuter,
REFIID riid,
DBPARAMS *pParams,
LONG *pcRowsAffected,
IUnknown **ppRowset)
{
ATLTRACE2(atlTraceDBProvider, 0, "CConversionProviderCommand::Execute()\n");
// This code must be here as the parameters are connected to the command's accessor, not
// the rowsets... and we dont copy the accessors across yet...
if (m_strCommandText == _T("CONVERT"))
{
// We must have a paramter passed to us.
if (!pParams ||
!pParams->pData ||
pParams->cParamSets != 1 ||
pParams->hAccessor == 0)
{
ATLTRACE2(atlTraceDBProvider, 0, "CConversionProviderCommand::Execute called with no parameters\n");
return E_FAIL;
}
DBACCESSORFLAGS dwAccessorFlags = 0;
ULONG cBindings = 0;
DBBINDING *prgBindings = 0;
HRESULT hr = GetBindings(pParams->hAccessor,
&dwAccessorFlags,
&cBindings,
&prgBindings );
if (hr != S_OK)
{
return E_FAIL;
}
// can it be anything other than an unknown?
VARIANT ¶m = *(VARIANT*)((unsigned char*)(pParams->pData) + prgBindings[0].obValue);
if (param.vt != VT_UNKNOWN)
{
return E_FAIL;
}
IUnknown *pUnk = param.punkVal;
// At this point we have a pointer to the object that we want to create a rowset on,
pUnk->AddRef();
_IGetAsOLEDBRowset *pGetAsRowset = 0;
hr = pUnk->QueryInterface(IID__IGetAsOLEDBRowset, (void**)&pGetAsRowset);
pUnk->Release();
if (SUCCEEDED(hr))
{
// we now have a pointer to the thing that knows how to give us a rowset...
// Make it so...
IUnknown *pOurUnknown = 0;
hr = QueryInterface(IID_IUnknown, (void**)&pOurUnknown);
if (SUCCEEDED(hr))
{
hr = pGetAsRowset->GetAsRowset(pOurUnknown, pUnkOuter, riid, pcRowsAffected, ppRowset);
pOurUnknown->Release();
}
pGetAsRowset->Release();
}
return hr;
}
return DB_E_NOTABLE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -