[HELP]把 Recordset 保存为 IStream 出错……
HRESULT SaveRS(_RecordsetPtr pRS/*IN*/, IStream* * ppStream/*OUT*/)
{
HRESULT hr=S_OK;
try
{
*ppStream=NULL;
// QI and return IPersistStream
IPersistStreamPtr pIPersist(pRS);
if (pIPersist )
{
//Create a standard stream in memory
if (FAILED(hr=CreateStreamOnHGlobal(0, TRUE, (IStream **)ppStream)))
return hr;
// Persist the pRS
if (FAILED(hr=OleSaveToStream(pIPersist, *ppStream)))
return hr;
}
else
return E_NOINTERFACE;
}
catch (_com_error & e)
{
return e.Error();
}
return S_OK;
}
void MyFunc()
{
if( ! AfxOleInit() )
return ;
using namespace ADODB ;
try
{
HRESULT hr = 0 ;
//
_ConnectionPtr pConnection ;
if( FAILED(pConnection.CreateInstance(__uuidof(Connection))))
return ;
CString strConn = "Provider=OraOLEDB.Oracle;User ID=hello;Password=hello;Persist Security Info=True;Data Source=local" ;
if( FAILED(pConnection->Open(_bstr_t(strConn),"","",adConnectUnspecified)))
return ;
//
_CommandPtr cmd ;
if(FAILED(cmd.CreateInstance(__uuidof(Command))))
return ;
cmd->ActiveConnection = pConnection ;
cmd->CommandText = (LPCTSTR)"Select * From PacsUser" ;
_RecordsetPtr pRS = cmd->Execute(NULL,NULL,adCmdText) ;
IStreamPtr pStream ;
hr = SaveRS(pRS,(IStream**)&pStream) ; // 这里返回 H_NOINTERFACE,调试后发现,是OleSaveToStream错误。