用到的库#include "TCHAR.h"-----------------------------头文件开始------------------------------
//在实际应用中,根据自己情况决定使用方法
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","ADOEOF")
//#import "msado15.dll" no_namespace rename("EOF","ADOEOF")///////////////////////////////////////////////////////////////////////////////////////////////////////
/*
//加载COM库
::CoInitialize(NULL); //卸载COM库
::CoUninitialize();
*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 示例:
// DataConnection 进行数据库连接。反回连接值 (真:表示成功,假:表示失败)            
// DataConnection obj; //创建一个类对象
// obj.Create(); //创建一个连接对象
// SQL数据库连接
// CString dbString = "Provider=SQLOLEDB;Initial Catalog=DB;User ID=sa;Password=sa;Data Source=(local)";
// ACCESS 数据库连接
// CString dbString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db2.mdb;User ID=admin;Password=;
// Jet OLEDB:Database Password=123";(接上一行的,这里怎自动换行了)
// oracle 数据库连接
// CString dbString = "Provider=OraOLEDB.Oracle.1;Data Source=workflow;User ID=user;Password=pw";
// ODBC 数据源
// CString dbString = "Data Source=adotest;UID=sa;PWD=sa";
// obj.Open(dbString);//进行数据库连接
// obj.GetConnectionPtr(void);//取得数据连接值
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class CfAdoConnection
{
public:
CfAdoConnection(void);
CfAdoConnection(LPCTSTR lpDBpath);
public:
virtual ~CfAdoConnection(void);
protected:
_ConnectionPtr m_hConnPtr;
 
public:
BOOL Create();
/*
enum ConnectModeEnum
{
adModeUnknown = 0, //缺省。当前的许可权未设置 
adModeRead = 1, // 只读
adModeWrite = 2, // 只写
adModeReadWrite = 3, //可以读写 
adModeShareDenyRead = 4, //阻止其它Connection对象以读权限打开连接 
adModeShareDenyWrite = 8, //阻止其它Connection对象以写权限打开连接 
adModeShareExclusive = 12, //阻止其它Connection对象打开连接 
adModeShareDenyNone = 16, //允许其它程序或对象以任何权限建立连接 
adModeRecursive = 4194304
};
 */
virtual BOOL Open(LPCTSTR lpDBpath,LONG lConnectMode = 0);
virtual BOOL Open(LPCTSTR lpDBpath,LPCTSTR lpUserID,LPCTSTR lpPassword,LONG lConnectMode = 0 );
BOOL IsCreate();
BOOL IsOpen();
public:
_ConnectionPtr GetConnectionPtr(void);
public:
virtual void SetTimeOut(LONG lTimeout);
public:
virtual BOOL Close();
virtual BOOL Release();
public:
};
/////////////////////////////////////////////////////////////////////////////////////////////////////
class CfAdoRecordset
{
public:
CfAdoRecordset();
CfAdoRecordset(_ConnectionPtr pConnection);
virtual ~CfAdoRecordset();
protected:
_RecordsetPtr m_hRecPtr;
_ConnectionPtr m_hConnPtr;
public:
BOOL Create();
/*
enum CursorTypeEnum
{
    adOpenUnspecified = -1,
    adOpenForwardOnly = 0,  //只能用MoveNext读取,并且打开的同时建立的数据库的备份,不能即时体现数据库记录状态,比如记录的编辑和增删.
    adOpenKeyset = 1,       //'可上下滚动的游标,给打开的记录创建了一个关键字列表,类似记录集的描述,访问的时候才去取得数据值,
//就是说可以即时看到修改信息,但是不能即时得到数据是否删除的信息,因为这个关键字列表是事先初始化好的.
adOpenDynamic = 2,      //'完全可滚动,可得到数据的最新状态,执行效率也会有所降低.

adOpenStatic = 3 // ' 完全可滚动,但是和adOpenKeyset类似,它先将数据库备份文件之后进行操作.可以断开数据库连接后继续使用.
  
};
 */
/*
enum LockTypeEnum
{
    adLockUnspecified = -1,
    adLockReadOnly = 1, //'只读锁,不能操作记录
    adLockPessimistic = 2, //'悲观锁,操作者打开之后立即上锁,直到修改完成或者放弃修改为止,此时其他人无法编辑.
    adLockOptimistic = 3, //'乐观锁,当记录将要被更新的时候才开始上锁,但是不能保证在提交修改之前是否有人改动过.
    adLockBatchOptimistic = 4 //'批量乐观锁,SQL server中要使用它,必须打开一个可上下滚动的游标,如adOpenKeyset,adOpenStatic.
};
 */
/*
enum CommandTypeEnum
{
    adCmdUnspecified = -1,
    adCmdUnknown = 8,
    adCmdText = 1,
    adCmdTable = 2,
    adCmdStoredProc = 4,
    adCmdFile = 256,
    adCmdTableDirect = 512
};
 */ BOOL Open(_ConnectionPtr pConnection,LPCTSTR lpszCmd,int nCursorType = 2 ,int nLockType = 3 ,int nCommandType = 1 );
BOOL Open(LPCTSTR lpszCmd,int nCfrsorType  = 2 ,int nLockType  = 3 ,int nCommandType  = 1  );
BOOL IsCreate();
BOOL IsOpen();
public:
BOOL Read(const _variant_t & Index,_variant_t & pvar);
BOOL Read(LPCTSTR lpszField,_variant_t & pvar);
BOOL Write(const _variant_t & Index,const _variant_t & pvar);
BOOL Write(LPCTSTR lpszField,const _variant_t & pvar);public:
BOOL Read(LPCTSTR lpszField,PTCHAR szData,int nlen,int &nRelen);#ifdef _AFX
BOOL Read(LPCTSTR lpszField,CString &csData);
#endif BOOL Read(LPCTSTR lpszField,long &lData);
BOOL Read(LPCTSTR lpszField,int &iData);
BOOL Read(LPCTSTR lpszField,double &dData);
BOOL Read(LPCTSTR lpszField,float &fData);
BOOL Write(LPCTSTR lpszField,LPCTSTR szPrompt, ...);public:
BOOL WriteBit(LPCTSTR lpszField,PVOID lpData,int nlen);
BOOL WriteBitFromFile(LPCTSTR lpszField,LPCTSTR lpFileName);
BOOL ReadBit(LPCTSTR lpszField,PVOID lpData,int nlen,int &nRelen);
BOOL ReadBitToFile(LPCTSTR lpszField,LPCTSTR lpFileName);public:
BOOL MoveNext();
BOOL MoveFirst();
BOOL MoveLast();
BOOL IsBegin();
BOOL IsEnd();
public:
BOOL New();
BOOL Del();
BOOL Update();
BOOL Close();
BOOL Release();
public:
UINT GetContentSize(LPCTSTR lpszField);
protected:
BOOL CharToVariant( variant_t &varBinaryData, LPBYTE pDataBuffer, long nBufferLength );
BOOL VariantToChar( LPBYTE pDataBuffer,variant_t &varBinaryData, long nBufferLength );};-----------------------------头文件结束------------------------------

解决方案 »

  1.   


    -----------------------------源文件开始------------------------------
    #pragma  warning (disable:4996 4101) 
    CfAdoConnection::CfAdoConnection(void)
    {
    m_hConnPtr = NULL;
    }
    CfAdoConnection::~CfAdoConnection(void)
    {   
    Close();
    Release();}
    BOOL CfAdoConnection::Create()
    {
    BOOL bResult = FALSE;
    try
    {
    ///创建Connection对象
    bResult = SUCCEEDED(m_hConnPtr.CreateInstance(_T("ADODB.Connection")));
    }
    catch(_com_error &e)
    {
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;
    }
    BOOL CfAdoConnection::Open(LPCTSTR lpszDBpath,LONG lConnectMode /*= ModeUnknown*/ )
    {
    BOOL bResult = FALSE; // try 
    {  ///连接数据库
    bResult = SUCCEEDED(m_hConnPtr->Open(_bstr_t(lpszDBpath),"","",lConnectMode)); } 
    catch(_com_error &e)
    {
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    BOOL CfAdoConnection::Open(LPCTSTR lpszDBpath,LPCTSTR lpszUserID,LPCTSTR lpszPassword,LONG lConnectMode /*= ModeUnknown*/ )
    {
    BOOL bResult = FALSE; try 
    {  ///连接数据库 bResult = SUCCEEDED( m_hConnPtr->Open(_bstr_t(lpszDBpath),_bstr_t(lpszUserID),_bstr_t(lpszPassword),lConnectMode) );

    catch(_com_error &e)
    {
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    BOOL CfAdoConnection::IsCreate()
    {
    //
    return (m_hConnPtr !=NULL);
    }
    BOOL CfAdoConnection::IsOpen()
    {
    //
    return (m_hConnPtr !=NULL && m_hConnPtr->State   ==   adStateOpen);
    }
    BOOL CfAdoConnection::Close()
    {
    BOOL bResult = FALSE; // try
    {
    if(IsOpen())   
    {
    bResult = SUCCEEDED( m_hConnPtr->Close());
    }
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult ;
    }
    BOOL CfAdoConnection::Release()
    {
    BOOL bResult = FALSE; // try 

    if ( IsOpen() )
    {
    Close();
    } if( IsCreate() )
    {
    m_hConnPtr.Release();
    m_hConnPtr =NULL;
    bResult = TRUE;
    } }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    void CfAdoConnection::SetTimeOut(LONG lTimeout)
    {
    //
    if( IsCreate() )
    m_hConnPtr->ConnectionTimeout=lTimeout;
    }
    _ConnectionPtr CfAdoConnection::GetConnectionPtr()
    {
    return m_hConnPtr;
    }
    -----------------------------源文件结束------------------------------
      

  2.   


    CfAdoRecordset::CfAdoRecordset(void)
    { m_hRecPtr=NULL;
    }
    CfAdoRecordset::CfAdoRecordset(_ConnectionPtr pConnection)
    {
    m_hRecPtr = NULL;
    m_hConnPtr = pConnection;}
    CfAdoRecordset::~CfAdoRecordset(void)
    {
    Close();
    Release();
    }
    BOOL CfAdoRecordset::Create()
    { BOOL bResult = FALSE; // try 

    bResult = SUCCEEDED(m_hRecPtr.CreateInstance(_T("ADODB.Recordset")));
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;}
    BOOL CfAdoRecordset::Open(_ConnectionPtr pConnection,LPCTSTR lpszCmd,
      int nCfrsorType /*= OpenDynamic*/,int nLockType /*= LockOptimistic*/,int nCommandType /*= CmdText*/)
    {
    m_hConnPtr=pConnection; return Open(lpszCmd,nCfrsorType,nLockType,nCommandType);
    }BOOL CfAdoRecordset::Open(LPCTSTR lpszCmd,
      int nCursorType /*= OpenDynamic*/,int nLockType /*= LockOptimistic*/,int nCommandType /*= CmdText*/)
    {
    BOOL bResult = FALSE; // try 

    bResult = SUCCEEDED( m_hRecPtr->Open(_bstr_t(lpszCmd),m_hConnPtr.GetInterfacePtr(),
    (CursorTypeEnum)nCursorType,(LockTypeEnum)nLockType,nCommandType) ); }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;
    }
    BOOL CfAdoRecordset::IsCreate()
    {
    // return (m_hRecPtr != NULL);
    }
    BOOL CfAdoRecordset::IsOpen()
    {
    //
    return (m_hRecPtr != NULL && m_hRecPtr->State == adStateOpen );
    }
    BOOL CfAdoRecordset::Read(const _variant_t & Index,_variant_t & pvar)
    {
    //
    BOOL bResult = FALSE;
    try 
    {  if( IsOpen() )
    {
    pvar = m_hRecPtr->GetCollect(Index);
    bResult = TRUE;
    }
    }
    catch (_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    {
    }
    return bResult;
    }
    BOOL CfAdoRecordset::Write(const _variant_t & Index,const _variant_t & pvar)
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen() )
    {
    m_hRecPtr->PutCollect(Index,pvar);
    bResult = TRUE;
    }
    }
    catch (_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    {
    } return bResult;
    }
    BOOL CfAdoRecordset::Read(LPCTSTR lpszField,_variant_t & pvar)
    {
    return Read(_variant_t(lpszField),pvar);
    }
    BOOL CfAdoRecordset::Write(LPCTSTR lpszField,const _variant_t & pvar)
    {
    return Write(_variant_t(lpszField),pvar);
    }
    BOOL CfAdoRecordset::Read(LPCTSTR lpszField,PTCHAR szData,int nlen,int &nRelen)
    {
    BOOL bResult = FALSE; variant_t v; if( bResult = Read(lpszField,v) )
    {
    nRelen = min((int)_tcslen((PTCHAR)(_bstr_t)v),nlen);

    _tcsncpy(szData,(( v.vt == VT_NULL || v.vt == VT_EMPTY )?_T(""):(PTCHAR)(_bstr_t)v),nRelen);
    } return bResult;
    }#ifdef _AFXBOOL CfAdoRecordset::Read(LPCTSTR lpszField,CString &csData)
    {
    BOOL bResult = FALSE;

    variant_t v;

    if( bResult = Read(lpszField,v) )
    {
    csData.Format(_T("%s"),( v.vt == VT_NULL || v.vt == VT_EMPTY )?_T(""):(TCHAR*)(_bstr_t)v);
    }

    return bResult;}#endifBOOL CfAdoRecordset::Read(LPCTSTR lpszField,long &lData)
    {
    BOOL bResult = FALSE;

    variant_t v;

    if( bResult = Read(lpszField,v) )
    { if( v.vt != VT_NULL && v.vt != VT_EMPTY )
    {
    lData =(long)v.lVal;
    }
    }

    return bResult;
    }
    BOOL CfAdoRecordset::Read(LPCTSTR lpszField,int &iData)
    {
    BOOL bResult = FALSE;

    variant_t v;

    if( bResult = Read(lpszField,v) )
    { if( v.vt != VT_NULL && v.vt != VT_EMPTY)
    {
    iData =(int)v.iVal;
    }
    }

    return bResult;
    }
    BOOL CfAdoRecordset::Read(LPCTSTR lpszField,double &dData)
    {
    BOOL bResult = FALSE;

    variant_t v;

    if( bResult = Read(lpszField,v) )
    { if( v.vt != VT_NULL && v.vt != VT_EMPTY )
    {
    dData =(double)v.dblVal;
    }
    }return bResult;}
    BOOL CfAdoRecordset::Read(LPCTSTR lpszField,float &fData)
    {
    BOOL bResult = FALSE;

    variant_t v;

    if( bResult = Read(lpszField,v) )
    { if( v.vt != VT_NULL && v.vt != VT_EMPTY)
    {
    fData =(float)v.fltVal;
    }
    }

    return bResult;}
    BOOL CfAdoRecordset::Write(LPCTSTR lpszField,LPCTSTR szPrompt, ...)
    {
    BOOL bResult = FALSE; TCHAR szBuffer[8000]={0};///最大长度 va_list ap;
    va_start(ap , szPrompt); _vsntprintf(szBuffer ,8000, szPrompt , ap); va_end(ap); bResult = Write(lpszField,_variant_t(szBuffer)); return bResult;
    }
    BOOL CfAdoRecordset::WriteBit(LPCTSTR lpszField,PVOID lpData,int nlen)
    {
    BOOL bResult = FALSE; variant_t v; if( CharToVariant(v,(BYTE*)lpData,nlen) )
    bResult = Write(lpszField,v); return bResult;
    }
    BOOL CfAdoRecordset::WriteBitFromFile(LPCTSTR lpszField,LPCTSTR lpFileName)
    {
    BOOL bResult = FALSE; // try 

    _StreamPtr pstm(_uuidof(Stream));   
    _variant_t var(DISP_E_PARAMNOTFOUND,VT_ERROR);   
    pstm->PutType(adTypeBinary); 
    pstm->put_Mode(adModeReadWrite);//adModeReadWrite=3
    pstm->raw_Open(var,adModeUnknown,adOpenStreamUnspecified,NULL,NULL);    if( SUCCEEDED( pstm->LoadFromFile(_bstr_t(lpFileName) ) ) )
    bResult =  SUCCEEDED( Write(lpszField,pstm->Read(pstm->GetSize())) );
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage()); }
    catch(...)
    { }
    return bResult;}BOOL CfAdoRecordset::ReadBit(LPCTSTR lpszField,PVOID lpData,int nlen,int &nRelen)
    {
    //
    BOOL bResult = FALSE;
    try 
    {  variant_t v;

    if(  Read(lpszField,v) )
    {

    int nContentSize = GetContentSize(lpszField);

    LPBYTE lpBuf=new BYTE[nContentSize];
    if( lpBuf )
    {
    memset(lpBuf,0,nContentSize);

    nRelen =min(nlen,nContentSize);
    if( bResult = VariantToChar(lpBuf,v,nRelen) )
    {
    memcpy(lpData,lpBuf,nRelen);
    }

    delete []lpBuf;
    lpBuf = NULL;
    }
    }
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;
    }BOOL CfAdoRecordset::ReadBitToFile(LPCTSTR lpszField,LPCTSTR lpFileName)
    {
    //
    BOOL bResult = FALSE;
    try 
    {  _StreamPtr pstm(_uuidof(Stream));   
    _variant_t var(DISP_E_PARAMNOTFOUND,VT_ERROR);   
    pstm->PutType(adTypeBinary);
    pstm->put_Mode(adModeReadWrite);//adModeReadWrite=3
    pstm->raw_Open(var,adModeUnknown,adOpenStreamUnspecified,NULL,NULL);    //pstm->Write(m_hRecPtr->GetFields()->GetItem(_variant_t(fIeld))->Value);
    variant_t v;
    if(  Read(lpszField,v) )
    if( SUCCEEDED( pstm->Write( v ) ) )
    bResult = SUCCEEDED(pstm->SaveToFile(_bstr_t(lpFileName),adSaveCreateOverWrite)); }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;}
    BOOL CfAdoRecordset::MoveNext()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen() )
    bResult = SUCCEEDED( m_hRecPtr->MoveNext() );
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    BOOL CfAdoRecordset::MoveFirst()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen() )
    bResult = SUCCEEDED( m_hRecPtr->MoveFirst() );
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    BOOL CfAdoRecordset::MoveLast()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen() )
    bResult = SUCCEEDED( m_hRecPtr->MoveLast() );
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    BOOL CfAdoRecordset::IsBegin()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen() )
    bResult = m_hRecPtr->BOF; }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;
    }
    BOOL CfAdoRecordset::IsEnd()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen() )
    bResult = m_hRecPtr->ADOEOF; }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    BOOL CfAdoRecordset::New()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen() )
    bResult = SUCCEEDED(m_hRecPtr->AddNew()); }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage()); }
    catch(...)
    { }
    return bResult;
    }
    BOOL CfAdoRecordset::Del()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen() )
    bResult = SUCCEEDED(m_hRecPtr->Delete(adAffectCurrent));
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;
    }
      

  3.   

    BOOL CfAdoRecordset::Update()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen() )
    bResult = SUCCEEDED(m_hRecPtr->Update()); }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;
    }
    BOOL CfAdoRecordset::Close()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen())   
    bResult = SUCCEEDED(m_hRecPtr->Close()); }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;
    }
    BOOL CfAdoRecordset::Release()
    {
    BOOL bResult = FALSE; // try 

    Close(); if ( IsCreate() )
    {
    m_hRecPtr.Release();
    m_hRecPtr =NULL; bResult = TRUE;
    }
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    UINT CfAdoRecordset::GetContentSize(LPCTSTR lpszField)
    {
    // UINT vl = 0; try
    {
    if( IsOpen() )
    {
    vl= m_hRecPtr->GetFields()->GetItem(_bstr_t(lpszField))->ActualSize;
    } }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return vl;
    }BOOL CfAdoRecordset::CharToVariant( variant_t &varBinaryData, LPBYTE pDataBuffer, long nBufferLength )
    {
    BOOL  bResult = FALSE; // try
    { if( pDataBuffer != NULL && nBufferLength > 0 )
    {
    SAFEARRAY *psa; 
    SAFEARRAYBOUND rgsabound[1];  rgsabound[0].lLbound = 0; 
    rgsabound[0].cElements = nBufferLength; 
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象 
    if( psa != NULL )
    {
    LPBYTE pArrayBuffer = NULL;
    if( (SafeArrayAccessData( psa,(void **)&pArrayBuffer ) == S_OK) && pArrayBuffer != NULL )
    {
    memcpy( pArrayBuffer, pDataBuffer, nBufferLength );
    varBinaryData.vt = VT_ARRAY | VT_UI1;
    varBinaryData.parray = psa; bResult = TRUE;
    }
    SafeArrayUnaccessData (psa); 
    }
    }
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    BOOL CfAdoRecordset::VariantToChar( LPBYTE pDataBuffer,variant_t &varBinaryData, long nBufferLength )
    {
    BOOL  bResult = FALSE; // try
    {

    if( varBinaryData.vt == (VT_ARRAY | VT_UI1))
    {
    LPBYTE pArrayBuffer = NULL; if(SafeArrayAccessData(varBinaryData.parray,(void **)&pArrayBuffer) == S_OK && pArrayBuffer != NULL )
    {

    memcpy( pDataBuffer, pArrayBuffer, nBufferLength ); bResult = TRUE;
    }
    SafeArrayUnaccessData (varBinaryData.parray); 
    } }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
      

  4.   

    费掉3楼的.BOOL CfAdoRecordset::Update()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen() )
    bResult = SUCCEEDED(m_hRecPtr->Update()); }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;
    }
    BOOL CfAdoRecordset::Close()
    {
    BOOL bResult = FALSE; // try 

    if( IsOpen())   
    bResult = SUCCEEDED(m_hRecPtr->Close()); }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { }
    return bResult;
    }
    BOOL CfAdoRecordset::Release()
    {
    BOOL bResult = FALSE; // try 

    Close(); if ( IsCreate() )
    {
    m_hRecPtr.Release();
    m_hRecPtr =NULL; bResult = TRUE;
    }
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    UINT CfAdoRecordset::GetContentSize(LPCTSTR lpszField)
    {
    // UINT vl = 0; try
    {
    if( IsOpen() )
    {
    vl= m_hRecPtr->GetFields()->GetItem(_bstr_t(lpszField))->ActualSize;
    } }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return vl;
    }BOOL CfAdoRecordset::CharToVariant( variant_t &varBinaryData, LPBYTE pDataBuffer, long nBufferLength )
    {
    BOOL  bResult = FALSE; // try
    { if( pDataBuffer != NULL && nBufferLength > 0 )
    {
    SAFEARRAY *psa; 
    SAFEARRAYBOUND rgsabound[1];  rgsabound[0].lLbound = 0; 
    rgsabound[0].cElements = nBufferLength; 
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound); ///创建SAFEARRAY对象 
    if( psa != NULL )
    {
    LPBYTE pArrayBuffer = NULL;
    if( (SafeArrayAccessData( psa,(void **)&pArrayBuffer ) == S_OK) && pArrayBuffer != NULL )
    {
    memcpy( pArrayBuffer, pDataBuffer, nBufferLength );
    varBinaryData.vt = VT_ARRAY | VT_UI1;
    varBinaryData.parray = psa; bResult = TRUE;
    }
    SafeArrayUnaccessData (psa); 
    }
    }
    }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }
    BOOL CfAdoRecordset::VariantToChar( LPBYTE pDataBuffer,variant_t &varBinaryData, long nBufferLength )
    {
    BOOL  bResult = FALSE; // try
    {

    if( varBinaryData.vt == (VT_ARRAY | VT_UI1))
    {
    LPBYTE pArrayBuffer = NULL; if(SafeArrayAccessData(varBinaryData.parray,(void **)&pArrayBuffer) == S_OK && pArrayBuffer != NULL )
    {

    memcpy( pDataBuffer, pArrayBuffer, nBufferLength ); bResult = TRUE;
    }
    SafeArrayUnaccessData (varBinaryData.parray); 
    } }
    catch(_com_error &e)
    {
    //
    //fTrace(_T("%s"),e.ErrorMessage());
    }
    catch(...)
    { } return bResult;
    }