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 COledbCommand::Create(LPCTSTR pstrSQL, long lType /*= DB_OPEN_TYPE_FORWARD_ONLY*/, long lOptions /*= DB_OPTION_DEFAULT*/) { _ASSERTE(m_pDb->IsOpen()); _ASSERTE(!::IsBadStringPtr(pstrSQL,(UINT)-1)); HRESULT Hr; Close(); // Open the command 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); COledbDatabase::_SetRecordsetType(spCommand, lType, lOptions); m_spText = spCommand; _ASSERTE(m_spText); USES_CONVERSION; Hr = m_spText->SetCommandText(DBGUID_DBSQL, T2COLE(pstrSQL)); if( FAILED(Hr) ) return _Error(Hr); // Prepare the command if( (lOptions & DB_OPTION_PREPARE) != 0 ) { CComQIPtr<ICommandPrepare> spPrepare = m_spText; _ASSERTE(spPrepare); if( spPrepare ) { Hr = spPrepare->Prepare(0); if( FAILED(Hr) ) return _Error(Hr); } } // Create parameter bindings memory area long cbAlloc = MAX_PARAMS * sizeof(DBBINDING); m_rgBindings = (DBBINDING*) ::CoTaskMemAlloc(cbAlloc); if( m_rgBindings == NULL ) return FALSE; ::ZeroMemory(m_rgBindings, cbAlloc); m_pData = ::CoTaskMemAlloc(MAX_PARAMBUFFER_SIZE); _ASSERTE(m_pData); if( m_pData == NULL ) return FALSE; ::ZeroMemory(m_pData, MAX_PARAMBUFFER_SIZE); m_nParams = 0; m_dwBindOffset = 0L; return TRUE; }
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; }