//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1998 - 1998. // // File: odbvarnt.hxx // // Contents: Helper class for PROPVARIANTs, OLE-DB variant types and // Automation variant types in tables // // Classes: COLEDBVariant - derives from CTableVariant // // History: 09 Jan 1998 VikasMan Created // //-------------------------------------------------------------------------- #pragma once #include // forward declaration for OLE DB data conversion interface interface IDataConvert; //+------------------------------------------------------------------------- // // Class: COLEDBVariant // // Purpose: Derives from CTableVariant - adds functionality to convert // to/from OLE DB types and Automation variants. This class will // normally be used on the client side, while CTableVariant class // will normally be used on the server side. // // Interface: // // Notes: Because the underlying base data *is* a variant, this // class cannot have any non-static members (including // a vtable). // // For various conversions to OLE-DB types, this class uses // the OLEDB data conversion library(MSDADC.DLL). // // For additional info. refer to the notes section in the // CTableVariant class. // // History: 09 Jan 1998 VikasMan Created // //-------------------------------------------------------------------------- class COLEDBVariant: public CTableVariant { public: DBSTATUS OLEDBConvert( BYTE * pbDest, DBLENGTH cbDest, VARTYPE vtDest, PVarAllocator & rVarAllocator, DBLENGTH & rcbDstLen, XInterface& xDataConvert, BOOL fExtTypes = TRUE, BYTE bPrecision = 0, BYTE bScale = 0 ) const; static BOOL CanConvertType(DBTYPE wFromType, DBTYPE wToType, XInterface& xDataConvert); DBSTATUS GetDstLength( XInterface& xDataConvert, DBTYPE dbtypeDst, DBLENGTH & rcbDstLen ); private: HRESULT _GetOLEDBType( VARTYPE vt, DBTYPE& dbtype ) const; void * _GetDataPointer() const; DBSTATUS _CopyToOAVariant( VARIANT * pDest, PVarAllocator & rVarAllocator) const; DBSTATUS _StoreSimpleTypeArray( SAFEARRAY ** pbDstBuf) const; DBSTATUS _StoreLPSTRArray( SAFEARRAY ** pbDstBuf, PVarAllocator & rPool) const; DBSTATUS _StoreLPWSTRArray( SAFEARRAY ** pbDstBuf, PVarAllocator & rPool) const; DBSTATUS _StoreBSTRArray( SAFEARRAY ** pbDstBuf, PVarAllocator & rPool) const; DBSTATUS _StoreDecimalArray( SAFEARRAY ** pbDstBuf) const; DBSTATUS _StoreIntegerArray( VARTYPE vtDst, SAFEARRAY ** pbDstBuf) const; DBSTATUS _StoreVariantArray( SAFEARRAY ** pbDstBuf, PVarAllocator & rPool) const; DBSTATUS _StoreDateArray( SAFEARRAY ** pbDstBuf) const; DBSTATUS _StoreDate(BYTE * pbDstBuf, DBLENGTH cbDstBuf, VARTYPE vtDst, LONG lElem = 0) const; static BOOL _GetIDataConvert( XInterface& xDataConvert ); }; inline BOOL DBStatusOK( DBSTATUS DstStatus) { return ( DBSTATUS_S_OK == DstStatus || DBSTATUS_S_ISNULL == DstStatus || DBSTATUS_S_TRUNCATED == DstStatus ); }