BOOL COledbRecordset::Open(LPCTSTR pstrSQL, long lType /*= DB_OPEN_TYPE_FORWARD_ONLY*/, long lOptions /*= DB_OPTION_DEFAULT*/) { _ASSERTE(m_pDb==NULL || m_pDb->IsOpen()); _ASSERTE(!::IsBadStringPtr(pstrSQL,(UINT)-1)); HRESULT Hr; // Close old recordset Close(); m_nRowsAffected = 0; // Create a new recordset CComQIPtr<IDBCreateCommand> spCreate = m_pDb->m_spSession; if( spCreate == NULL ) return FALSE; CComPtr<ICommand> spCommand; Hr = spCreate->CreateCommand(NULL, IID_ICommand, (LPUNKNOWN*) &spCommand); if( FAILED(Hr) ) return _Error(Hr); // Set type COledbDatabase::_SetRecordsetType(spCommand, lType, lOptions); // Set SQL CComQIPtr<ICommandText> spText = spCommand; _ASSERTE(spText); USES_CONVERSION; Hr = spText->SetCommandText(DBGUID_DBSQL, T2COLE(pstrSQL)); if( FAILED(Hr) ) return _Error(Hr); // Execute... Hr = spText->Execute(NULL, IID_IRowset, NULL, &m_nRowsAffected, (LPUNKNOWN*) &m_spRowset); if( FAILED(Hr) ) return _Error(Hr); // Bind columns if( !_BindColumns() ) return FALSE; return MoveNext(); }
BOOL COledbDatabase::ExecuteSQL(LPCTSTR pstrSQL, long lType /*= DB_OPEN_TYPE_FORWARD_ONLY*/, long lOptions /*= DB_OPTION_DEFAULT*/, DWORD* pdwRowsAffected/*= NULL*/) { USES_CONVERSION; HRESULT Hr; if( pdwRowsAffected ) *pdwRowsAffected = 0; CComQIPtr<IDBCreateCommand> spCreate = m_spSession; if( spCreate == NULL ) return FALSE; CComPtr<ICommand> spCommand; Hr = spCreate->CreateCommand(NULL, IID_ICommand, (LPUNKNOWN*) &spCommand); if( FAILED(Hr) ) return _Error(Hr); _SetRecordsetType(spCommand, lType, lOptions); CComQIPtr<ICommandText> spText = spCommand; _ASSERTE(spText); Hr = spText->SetCommandText(DBGUID_DBSQL, T2CW(pstrSQL)); if( FAILED(Hr) ) return _Error(Hr); CComPtr<IRowset> spRowset; Hr = spText->Execute(NULL, IID_IRowset, NULL, (LONG*) pdwRowsAffected, (LPUNKNOWN*) &spRowset); if( FAILED(Hr) ) return _Error(Hr); return TRUE; }
STDMETHODIMP CPluginDebugCommand::Execute(VARIANT* vParam, IVariantObject** ppVariantObject) { CComQIPtr<IDebugCommand> pDebugCommand = m_pDebugCommand; ATLASSERT(pDebugCommand); CComVar vResult; RETURN_IF_FAILED(pDebugCommand->Execute(vParam, &vResult)); GUID iidCommand = {0}; RETURN_IF_FAILED(m_pPluginInfo->GetId(&iidCommand)); if (ppVariantObject) { CComPtr<IUnknown> pPluginParserUnknown; RETURN_IF_FAILED(m_pPluginManager->CreatePluginInstance(PNAMESP_DBGENGINE, PDBGTYPE_COMMAND_PARSER, iidCommand, &pPluginParserUnknown)); CComQIPtr<ICommandResultParser> pCommandResultParser = pPluginParserUnknown; if (!pCommandResultParser) return E_NOINTERFACE; RETURN_IF_FAILED(pCommandResultParser->Parse(&vResult, ppVariantObject)); CComQIPtr<IInitializeWithPluginInfo> pInitializeWithPluginInfo = m_pDebugCommand; if (pInitializeWithPluginInfo) { CComPtr<IPluginInfo> pPluginInfo; RETURN_IF_FAILED(pInitializeWithPluginInfo->GetPluginInfo(&pPluginInfo)); CComQIPtr<IVariantObject> pSourceVariantObject = pPluginInfo; if (pSourceVariantObject) { CComVar v1; if (pSourceVariantObject->GetVariantValue(VAR_COMMAND_TEXT, &v1) == S_OK) { RETURN_IF_FAILED((*ppVariantObject)->SetVariantValue(VAR_COMMAND_TEXT, &v1)); } } } } return S_OK; }