www.pudn.com > TestMyADO.zip > MyADO.cpp
// MyADO.cpp: implementation of the CMyADO class. // // Copyright 2003 Nathan Davies // ////////////////////////////////////////////////////////////////////// #include#include #include "MyADO.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// // Class Constructor CMyADO::CMyADO() { m_pCommandPtr = NULL; } // Class Destructor CMyADO::~CMyADO() { if( m_pRecordsetPtr ) { if( m_pRecordsetPtr->State == adStateOpen ) m_pRecordsetPtr->Close(); m_pRecordsetPtr = NULL; } m_pCommandPtr = NULL; } // Create a Parameter and Add it to the CommandPtr Object (Which will be used to Execute the Stored Procedure) HRESULT CMyADO::AddParameter( _bstr_t btParameterName, DataTypeEnum enDataType, ParameterDirectionEnum enParameterDirection, long lSize, _variant_t vtValue ) { HRESULT hReturn = S_FALSE; if( IsConnected() && IsInitialized()) { try { _ParameterPtr pParameterPtr = m_pCommandPtr->CreateParameter( btParameterName, enDataType, enParameterDirection, lSize, vtValue ); m_pCommandPtr->Parameters->Append( pParameterPtr ); hReturn = S_OK; } catch( _com_error& eComError ) { char szErrorMsg[256]; _snprintf( szErrorMsg, sizeof( szErrorMsg ), "ERROR in CMyADO::Execute() - %s\n", eComError.ErrorMessage()); OutputDebugString( szErrorMsg ); } catch( ... ) { } } return hReturn; } // Add Parameter Heler Function for Long Type and Input Direction HRESULT CMyADO::AddParameterInputLong( _bstr_t btParameterName, long lValue ) { return AddParameter( btParameterName, adInteger, adParamInput, sizeof( long ), _variant_t( lValue )); } // Add Parameter Helper Function for Text Type and Input Direction HRESULT CMyADO::AddParameterInputText( _bstr_t btParameterName, _bstr_t btValue ) { return AddParameter( btParameterName, adVarChar, adParamInput, btValue.length(), _variant_t( btValue )); } // Add Parameter Helper Function for Long Type and Input/Output Direction HRESULT CMyADO::AddParameterInputOutputLong( _bstr_t btParameterName, long lValue ) { return AddParameter( btParameterName, adInteger, adParamInputOutput, sizeof( long ), _variant_t( lValue )); } // Add Parameter Helper Function for Text Type and Input/Output Direction HRESULT CMyADO::AddParameterInputOutputText( _bstr_t btParameterName, _bstr_t btValue, DWORD dwMaxTextSize ) { return AddParameter( btParameterName, adVarChar, adParamInputOutput, dwMaxTextSize, _variant_t( btValue )); } // Add Parameter Helper Function for Long Type and Output Direction HRESULT CMyADO::AddParameterOutputLong( _bstr_t btParameterName ) { _variant_t vtNull; return AddParameter( btParameterName, adInteger, adParamOutput, 0, vtNull ); } // Add Parameter Helper Function for Text Type and Output Direction HRESULT CMyADO::AddParameterOutputText( _bstr_t btParameterName, DWORD dwMaxTextSize ) { _variant_t vtNull; return AddParameter( btParameterName, adVarChar, adParamOutput, dwMaxTextSize, vtNull ); } // Add Parameter Helper Function for Return Value HRESULT CMyADO::AddParameterReturnValue() { _variant_t vtNull; return AddParameter( "RETURN_VALUE", adInteger, adParamReturnValue, 0, vtNull ); } // Close the Current ADO Connection HRESULT CMyADO::Close() { HRESULT hReturn = S_FALSE; if( m_pConnectionPtr ) { if( m_pConnectionPtr->State == adStateOpen ) { try { hReturn = m_pConnectionPtr->Close(); m_pConnectionPtr = NULL; } catch( _com_error& eComError ) { char szErrorMsg[256]; _snprintf( szErrorMsg, sizeof( szErrorMsg ), "ERROR in CMyADO::Close() - %s\n", eComError.ErrorMessage()); OutputDebugString( szErrorMsg ); } catch( ... ) { } } else hReturn = S_OK; } else hReturn = S_OK; return hReturn; } // Execute the Stored Procedure using the CommandPtr Object HRESULT CMyADO::Execute() { HRESULT hReturn = S_FALSE; if( IsConnected() && IsInitialized()) { try { m_pRecordsetPtr = m_pCommandPtr->Execute( NULL, NULL, adCmdStoredProc ); hReturn = S_OK; } catch( _com_error& eComError ) { char szErrorMsg[256]; _snprintf( szErrorMsg, sizeof( szErrorMsg ), "ERROR in CMyADO::Execute() - %s\n", eComError.ErrorMessage()); OutputDebugString( szErrorMsg ); } catch( ... ) { } } return hReturn; } // Retrieve a Value from the Recordset (which was created during Stored Procedure Execution) HRESULT CMyADO::GetField( _variant_t vtFieldName, _variant_t& vtValue ) { HRESULT hReturn = S_FALSE; if( IsConnected() && IsInitialized()) { try { vtValue = m_pRecordsetPtr->Fields->GetItem( vtFieldName )->Value; hReturn = S_OK; } catch( _com_error& eComError ) { char szErrorMsg[256]; _snprintf( szErrorMsg, sizeof( szErrorMsg ), "ERROR in CMyADO::GetField() - %s\n", eComError.ErrorMessage()); OutputDebugString( szErrorMsg ); } catch( ... ) { } } return hReturn; } // Get Field Helper Function for Long Type HRESULT CMyADO::GetFieldLong( _bstr_t btFieldName, long* plValue ) { _variant_t vtValue; HRESULT hReturn = GetField( btFieldName, vtValue ); if( hReturn == S_OK ) *plValue = ( long )vtValue; return hReturn; } // Get Field Helper Function for Text Type HRESULT CMyADO::GetFieldText( _bstr_t btFieldName, char* szText, DWORD dwMaxTextSize ) { _variant_t vtValue; HRESULT hReturn = GetField( btFieldName, vtValue ); if( hReturn == S_OK ) { _bstr_t btValue = ( _bstr_t )vtValue; if( dwMaxTextSize < btValue.length()) hReturn = S_FALSE; else strcpy( szText, btValue ); } return hReturn; } // Retrieve a Parameter (which was previously set up as either an Output or InputOutput Direction and is set during Stored Procedure Execution) HRESULT CMyADO::GetParameter( _variant_t vtParameterName, _variant_t& vtValue ) { HRESULT hReturn = S_FALSE; if( IsConnected() && IsInitialized()) { try { vtValue = m_pCommandPtr->Parameters->GetItem( vtParameterName )->Value; hReturn = S_OK; } catch( _com_error& eComError ) { char szErrorMsg[256]; _snprintf( szErrorMsg, sizeof( szErrorMsg ), "ERROR in CMyADO::GetParameter() - %s\n", eComError.ErrorMessage()); OutputDebugString( szErrorMsg ); } catch( ... ) { } } return hReturn; } // Retrieve Parameter Helper Function for Long Type HRESULT CMyADO::GetParameterLong( _bstr_t btParameterName, long* plValue ) { _variant_t vtValue; HRESULT hReturn = GetParameter( btParameterName, vtValue ); if( hReturn == S_OK ) *plValue = ( long )vtValue; return hReturn; } // Retrieve Parameter Helper Function for Return Value HRESULT CMyADO::GetParameterReturnValue( long* plReturnValue ) { return GetParameterLong( "RETURN_VALUE", plReturnValue ); } // Retrieve Parameter Helper Function for Text Type HRESULT CMyADO::GetParameterText( _bstr_t btParameterName, char* szText, DWORD dwMaxTextSize ) { _variant_t vtValue; HRESULT hReturn = GetParameter( btParameterName, vtValue ); if( hReturn == S_OK ) { _bstr_t btValue = ( _bstr_t )vtValue; if( dwMaxTextSize < btValue.length()) hReturn = S_FALSE; else strcpy( szText, btValue ); } return hReturn; } // Retrieve the Record Count for the Recordset (which was created during Stored Procedure Execution) HRESULT CMyADO::GetRecordCount( long* lRecordCount ) { HRESULT hReturn = S_FALSE; if( m_pRecordsetPtr ) { try { *lRecordCount = m_pRecordsetPtr->RecordCount; } catch( _com_error& eComError ) { char szErrorMsg[256]; _snprintf( szErrorMsg, sizeof( szErrorMsg ), "ERROR in CMyADO::GetParameter() - %s\n", eComError.ErrorMessage()); OutputDebugString( szErrorMsg ); } catch( ... ) { } } return hReturn; } // Close the Recordset and Initialize the CommandPtr Object HRESULT CMyADO::Initialize( _bstr_t btStoredProcedureName ) { HRESULT hReturn = S_FALSE; if( IsConnected()) { m_pCommandPtr = NULL; if( m_pRecordsetPtr ) { if( m_pRecordsetPtr->State == adStateOpen ) m_pRecordsetPtr->Close(); m_pRecordsetPtr = NULL; } m_pCommandPtr.CreateInstance( __uuidof( Command )); m_pCommandPtr->ActiveConnection = m_pConnectionPtr; m_pCommandPtr->CommandText = btStoredProcedureName; m_pCommandPtr->CommandType = adCmdStoredProc; hReturn = S_OK; } return hReturn; } // Check for Connection Status BOOL CMyADO::IsConnected() { return ( m_pConnectionPtr ); } // Check for EOF on the Recordset (which was created during Stored Procedure Execution) BOOL CMyADO::IsEOF() { BOOL bReturn = TRUE; if( m_pRecordsetPtr ) if( m_pRecordsetPtr->State == adStateOpen && !m_pRecordsetPtr->adoEOF ) bReturn = FALSE; return bReturn; } // Check for Initialization Status (CommandPtr Object is valid) BOOL CMyADO::IsInitialized() { return ( m_pCommandPtr ); } // Open a new ADO Connection HRESULT CMyADO::Open( _bstr_t btConnectionString, _bstr_t btUserID, _bstr_t btPassword ) { HRESULT hReturn = S_FALSE; if( m_pConnectionPtr == NULL ) { m_pConnectionPtr.CreateInstance( __uuidof( Connection )); try { hReturn = m_pConnectionPtr->Open( btConnectionString, btUserID, btPassword, 0 ); if( hReturn == S_OK ) m_pConnectionPtr->CursorLocation = adUseClient; } catch( _com_error& eComError ) { char szErrorMsg[256]; _snprintf( szErrorMsg, sizeof( szErrorMsg ), "ERROR in CMyADO::Open( '%s', '%s', '%s' ) - %s\n", ( char* )btConnectionString, ( char* )btUserID, ( char* )btPassword, eComError.ErrorMessage()); OutputDebugString( szErrorMsg ); } catch( ... ) { } } else hReturn = S_OK; return hReturn; } // Move to the Next Record in the Recordset (which was created during Stored Procedure Execution) HRESULT CMyADO::MoveNext() { HRESULT hResult = S_FALSE; if( !IsEOF()) { try { hResult = m_pRecordsetPtr->MoveNext(); } catch( _com_error& eComError ) { char szErrorMsg[256]; _snprintf( szErrorMsg, sizeof( szErrorMsg ), "ERROR in CMyADO::MoveNext() - %s\n", eComError.ErrorMessage()); OutputDebugString( szErrorMsg ); } catch( ... ) { } } return hResult; }