ado方式操作数据库类

来源:互联网 发布:手机淘宝网会员名怎么注册 编辑:程序博客网 时间:2024/05/18 05:16

 VC/MFC数据库新任版主zyq5945(竹叶青)在数据库版开设帖子整理的一些ADO数据库入门与例子,为了表示支持我在其中回复了一个自己平时用的ado操作数据库的类。怎奈论坛对回帖字数有限制,结果只贴了头文件......不过竹叶青版主邀请我把这个类整理到博客里以便分享,我觉得这个办法不错。不过既然要整理到博客里就应该更正式一些,所以花些时间规范了一下这个类,并且制作了一个简单的使用范例,也算是对竹版的支持,对数据库版的一点小小的贡献吧。

      好久没写博客了,其实应该多说两句介绍一下这个类和其简单的使用。不过自己在数据库方面确实知之甚少,这个类其实也是抄来的,只不过在自己的使用过程中“本土化”了一下,呵呵。所以就不班门弄斧了,直接上代码吧,希望能对有志于涉足于数据库应用技术的同僚们有所帮助,按竹版的话说算是“入门实例”吧。

使用范例

本例中操作的数据库为ACCESS2003,操作方式为本地连接,数据库带密码

类实现代码

头文件

view plaincopy to clipboardprint?
#pragma once   
  
#include "math.h"   
  
#import "MSADO15.DLL"   rename_namespace("ADOWE") rename("EOF","EndOfFile")   
using namespace ADOWE;   
  
class CDBAdo   
{   
public:   
    _CommandPtr     m_ptrCommand;       //命令对象   
    _RecordsetPtr   m_ptrRecordset;     //记录集对象   
    _ConnectionPtr  m_ptrConnection;    //数据库对象   
  
    CString         m_strConnect,       //连接字符串   
                    m_strErrorMsg;      //错误信息   
  
public:   
    CDBAdo(void);   
    ~CDBAdo(void);   
  
    void    DetectResult(HRESULT hResult);   
    void    RecordErrorMsg(_com_error comError);   
    CString GetLastError(){return m_strErrorMsg;}   
  
    bool    CreateInstance();   
    bool    SetConnectionString(CString strDriver, CString strIP, WORD wPort, CString strCatalog, CString strUserID, CString strPassword);   
    bool    SetConnectionString(CString strDriver, CString strDataSrc, CString strPassword);   
    bool    OpenConnection();   
    bool    CloseConnection();   
    bool    IsConnecting();   
  
    void    ClearAllParameters();   
    void    AddParamter(LPCTSTR lpcsrName, ADOWE::ParameterDirectionEnum Direction, ADOWE::DataTypeEnum Type, long lSize, _variant_t & vtValue);   
    void    SetSPName(LPCTSTR lpcsrSPName);   
    bool    ExecuteCommand(bool bIsRecordset);   
    bool    Execute(LPCTSTR lpcsrCommand);   
    long    GetReturnValue();   
  
    bool    OpenRecordset(char* szSQL);   
    bool    CloseRecordset();   
    bool    IsRecordsetOpened();   
    bool    IsEndRecordset();   
    void    MoveToNext();   
    void    MoveToFirst();   
    void    MoveToLast();   
    long    GetRecordCount();   
  
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, WORD& wValue);   
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, CString& strValue);   
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, INT& nValue);   
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, BYTE& bValue);   
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, LONG& lValue);   
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, DWORD& dwValue);   
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, UINT& ulValue);   
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, DOUBLE& dbValue);   
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, __int64& llValue);   
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, COleDateTime& Time);   
    bool    GetFieldValue(LPCTSTR lpcsrFieldName, bool& bValue);   
};  
#pragma once

#include "math.h"

#import "MSADO15.DLL" rename_namespace("ADOWE") rename("EOF","EndOfFile")
using namespace ADOWE;

class CDBAdo
{
public:
 _CommandPtr  m_ptrCommand;  //命令对象
 _RecordsetPtr m_ptrRecordset;  //记录集对象
 _ConnectionPtr m_ptrConnection; //数据库对象

 CString   m_strConnect,  //连接字符串
     m_strErrorMsg;  //错误信息

public:
 CDBAdo(void);
 ~CDBAdo(void);

 void DetectResult(HRESULT hResult);
 void RecordErrorMsg(_com_error comError);
 CString GetLastError(){return m_strErrorMsg;}

 bool CreateInstance();
 bool SetConnectionString(CString strDriver, CString strIP, WORD wPort, CString strCatalog, CString strUserID, CString strPassword);
 bool SetConnectionString(CString strDriver, CString strDataSrc, CString strPassword);
 bool OpenConnection();
 bool CloseConnection();
 bool IsConnecting();

 void ClearAllParameters();
 void AddParamter(LPCTSTR lpcsrName, ADOWE::ParameterDirectionEnum Direction, ADOWE::DataTypeEnum Type, long lSize, _variant_t & vtValue);
 void SetSPName(LPCTSTR lpcsrSPName);
 bool ExecuteCommand(bool bIsRecordset);
 bool Execute(LPCTSTR lpcsrCommand);
 long GetReturnValue();

 bool OpenRecordset(char* szSQL);
 bool CloseRecordset();
 bool IsRecordsetOpened();
 bool IsEndRecordset();
 void MoveToNext();
 void MoveToFirst();
 void MoveToLast();
 long GetRecordCount();

 bool GetFieldValue(LPCTSTR lpcsrFieldName, WORD& wValue);
 bool GetFieldValue(LPCTSTR lpcsrFieldName, CString& strValue);
 bool GetFieldValue(LPCTSTR lpcsrFieldName, INT& nValue);
 bool GetFieldValue(LPCTSTR lpcsrFieldName, BYTE& bValue);
 bool GetFieldValue(LPCTSTR lpcsrFieldName, LONG& lValue);
 bool GetFieldValue(LPCTSTR lpcsrFieldName, DWORD& dwValue);
 bool GetFieldValue(LPCTSTR lpcsrFieldName, UINT& ulValue);
 bool GetFieldValue(LPCTSTR lpcsrFieldName, DOUBLE& dbValue);
 bool GetFieldValue(LPCTSTR lpcsrFieldName, __int64& llValue);
 bool GetFieldValue(LPCTSTR lpcsrFieldName, COleDateTime& Time);
 bool GetFieldValue(LPCTSTR lpcsrFieldName, bool& bValue);
};

实现文件

view plaincopy to clipboardprint?
#include "StdAfx.h"   
#include "DBAdo.h"   
  
CDBAdo::CDBAdo(void)   
{   
    m_strConnect    = _T("");   
    m_strErrorMsg   = _T("");   
  
    //初始化 COM   
    CoInitialize(NULL);   
}   
  
CDBAdo::~CDBAdo(void)   
{   
    //关闭连接   
    CloseConnection();   
  
    //释放对象   
    if(m_ptrCommand!=NULL)   
        m_ptrCommand.Release();   
    if(m_ptrRecordset!=NULL)   
        m_ptrRecordset.Release();   
    if(m_ptrConnection!=NULL)   
        m_ptrConnection.Release();   
}   
  
bool CDBAdo::CreateInstance()   
{   
    //创建对象   
    m_ptrCommand.CreateInstance(__uuidof(Command));   
    m_ptrRecordset.CreateInstance(__uuidof(Recordset));   
    m_ptrConnection.CreateInstance(__uuidof(Connection));   
  
    if(m_ptrCommand==NULL)   
    {   
        m_strErrorMsg   = _T("数据库命令对象创建失败");   
        return  false;   
    }   
    if(m_ptrRecordset==NULL)   
    {   
        m_strErrorMsg   = _T("数据库记录集对象创建失败");   
        return  false;   
    }   
    if(m_ptrConnection==NULL)   
    {   
        m_strErrorMsg   = _T("数据库连接对象创建失败");   
        return  false;   
    }   
  
    //设置变量   
    m_ptrCommand->CommandType    = adCmdStoredProc;   
    return  true;   
}   
  
void CDBAdo::DetectResult(HRESULT hResult)   
{   
    if(FAILED(hResult))   
        _com_issue_error(hResult);   
}   
  
void CDBAdo::RecordErrorMsg(_com_error comError)   
{   
    _bstr_t bstrDescribe(comError.Description());   
  
    m_strErrorMsg.Format(TEXT("ADO 错误:0x%8x,%s"), comError.Error(), (LPCTSTR)bstrDescribe);   
}   
  
bool CDBAdo::SetConnectionString(CString strDriver, CString strIP, WORD wPort, CString strCatalog, CString strUserID, CString strPassword)   
{   
    CString strProvider, strPWD, strUID, strData, strDataSrc;   
  
    strProvider.Format(_T("Provider=%s;"), strProvider);   
    strPWD.Format(_T("Password=%s;"), strPassword);   
    strUID.Format(_T("User ID=%s;"), strUserID);   
    strData.Format(_T("Initial Catalog=%s;"), strCatalog);   
    strDataSrc.Format(_T("Data Source=%s,%ld;"), strIP, wPort);   
  
    //构造连接字符串   
    m_strConnect    = strProvider+strPWD+_T("Persist Security Info=True;")+strUID+strData+strDataSrc;   
  
    return true;   
}   
  
bool CDBAdo::SetConnectionString(CString strDriver, CString strDataSrc, CString strPassword)   
{   
    CString strProvider, strDataSource, strPWD;   
  
    strProvider.Format(_T("Provider=%s;"), strDriver);   
    strDataSource.Format(_T("Data Source=%s;"), strDataSrc);   
    strPWD.Format(_T("Jet OLEDB:DataBase Password=%s;"), strPassword);   
  
    //构造连接字符串   
    m_strConnect    = strProvider+_T("User ID=Admin;")+strDataSource+strPWD;   
  
    return true;   
}   
  
bool CDBAdo::OpenConnection()   
{   
    try  
    {   
        //关闭连接   
        CloseConnection();   
  
        //连接数据库   
        DetectResult(m_ptrConnection->Open(_bstr_t(m_strConnect), "", "", adModeUnknown));   
        m_ptrConnection->CursorLocation  = adUseClient;   
        m_ptrCommand->ActiveConnection   = m_ptrConnection;   
  
        return true;   
    }   
    catch(_com_error& comError)    
    {   
        RecordErrorMsg(comError);   
    }   
  
    return false;   
}   
  
bool CDBAdo::CloseConnection()   
{   
    try  
    {   
        CloseRecordset();   
        if((m_ptrConnection!=NULL)&&(m_ptrConnection->GetState()!=adStateClosed))   
            DetectResult(m_ptrConnection->Close());   
  
        return true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return false;   
}   
  
bool CDBAdo::IsConnecting()   
{   
    try    
    {   
        //状态判断   
        if(m_ptrConnection==NULL)   
            return  false;   
        if(m_ptrConnection->GetState()==adStateClosed)   
            return  false;   
  
        //参数判断   
        long    lErrorCount = m_ptrConnection->Errors->Count;   
        if(lErrorCount>0L)   
        {   
            ErrorPtr    pError   = NULL;   
            for(long i=0; i<lErrorCount; i++)   
            {   
                pError  = m_ptrConnection->Errors->GetItem(i);   
                if(pError->Number==0x80004005)   
                    return  false;   
            }   
        }   
  
        return true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return false;   
}   
  
bool CDBAdo::OpenRecordset(char* szSQL)   
{   
    try  
    {   
        //关闭记录集   
        CloseRecordset();   
  
        m_ptrRecordset->Open(szSQL, m_ptrConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);   
  
        return true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
  
bool CDBAdo::CloseRecordset()   
{   
    try  
    {   
        if(IsRecordsetOpened())   
            DetectResult(m_ptrRecordset->Close());   
        return true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return false;   
}   
  
bool CDBAdo::IsRecordsetOpened()   
{   
    if(m_ptrRecordset==NULL)   
        return  false;   
    if(m_ptrRecordset->GetState()==adStateClosed)   
        return  false;   
  
    return true;   
}   
  
bool CDBAdo::IsEndRecordset()   
{   
    try    
    {   
        return (m_ptrRecordset->EndOfFile==VARIANT_TRUE);   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return true;   
}   
  
void CDBAdo::MoveToNext()   
{   
    try    
    {    
        m_ptrRecordset->MoveNext();    
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
}   
  
void CDBAdo::MoveToFirst()   
{   
    try    
    {    
        m_ptrRecordset->MoveFirst();    
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
}   
  
void CDBAdo::MoveToLast()   
{   
    try    
    {    
        m_ptrRecordset->MoveLast();    
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
}   
  
long CDBAdo::GetRecordCount()   
{   
    try  
    {   
        if(m_ptrRecordset==NULL)   
            return  0;   
        return  m_ptrRecordset->GetRecordCount();   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return 0;   
}   
  
void CDBAdo::ClearAllParameters()   
{   
    try    
    {   
        long    lParamCount = m_ptrCommand->Parameters->Count;   
        if(lParamCount>0L)   
        {   
            for(long i=lParamCount; i>0; i--)   
            {   
                _variant_t  vtIndex;   
  
                vtIndex.intVal  = i-1;   
                m_ptrCommand->Parameters->Delete(vtIndex);   
            }   
        }   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
}   
  
void CDBAdo::AddParamter(LPCTSTR lpcsrName, ADOWE::ParameterDirectionEnum Direction, ADOWE::DataTypeEnum Type, long lSize, _variant_t & vtValue)   
{   
    ASSERT(lpcsrName!=NULL);   
    try    
    {   
        _ParameterPtr   Parameter   = m_ptrCommand->CreateParameter(lpcsrName, Type, Direction, lSize, vtValue);   
        m_ptrCommand->Parameters->Append(Parameter);   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
}   
  
void CDBAdo::SetSPName(LPCTSTR lpcsrSPName)   
{   
    try    
    {    
        m_ptrCommand->CommandText    = lpcsrSPName;    
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
}   
  
bool CDBAdo::ExecuteCommand(bool bIsRecordset)   
{   
    try    
    {   
        //关闭记录集   
        CloseRecordset();   
        //执行命令   
        if(bIsRecordset)   
        {   
            m_ptrRecordset->PutRefSource(m_ptrCommand);   
            m_ptrRecordset->CursorLocation   = adUseClient;   
            DetectResult(m_ptrRecordset->Open((IDispatch*)m_ptrCommand, vtMissing, adOpenForwardOnly, adLockReadOnly, adOptionUnspecified));   
        }else    
        {   
            m_ptrConnection->CursorLocation  = adUseClient;   
            DetectResult(m_ptrCommand->Execute(NULL, NULL, adExecuteNoRecords));   
        }   
        return  true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
  
bool CDBAdo::Execute(LPCTSTR lpcsrCommand)   
{   
    try  
    {   
        m_ptrConnection->CursorLocation  = adUseClient;   
        m_ptrConnection->Execute(lpcsrCommand, NULL, adExecuteNoRecords);   
        return  true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
  
long CDBAdo::GetReturnValue()   
{   
    try    
    {   
        _ParameterPtr   ptrParam;   
        long            lParameterCount = m_ptrCommand->Parameters->Count;   
        for(long i=0; i<lParameterCount; i++)   
        {   
            ptrParam    = m_ptrCommand->Parameters->Item[i];   
            if(ptrParam->Direction==adParamReturnValue)   
                return  ptrParam->Value.lVal;   
        }   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  0;   
}   
  
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, WORD& wValue)   
{   
    wValue  = 0L;   
    try  
    {   
        _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))   
            wValue  = (WORD)vtFld.ulVal;   
  
        return true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return false;   
}   
  
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, CString& strValue)   
{   
    try  
    {   
        _variant_t vtFld    = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        if(vtFld.vt==VT_BSTR)   
        {   
            strValue    = (char*)_bstr_t(vtFld);   
            strValue.TrimLeft();   
            return  true;   
        }   
        return  false;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
  
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, INT& nValue)   
{   
    nValue  = 0;   
    try  
    {   
        _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        switch(vtFld.vt)   
        {   
        case VT_BOOL:   
            {   
                nValue  = vtFld.boolVal;   
                break;   
            }   
        case VT_I2:   
        case VT_UI1:   
            {   
                nValue  = vtFld.iVal;   
                break;   
            }   
        case VT_NULL:   
        case VT_EMPTY:   
            {   
                nValue  = 0;   
                break;   
            }   
        default: nValue = vtFld.iVal;   
        }      
        return true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return false;   
}   
  
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, BYTE& bValue)   
{   
    bValue  = 0;   
    try  
    {   
        _variant_t vtFld    = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        switch(vtFld.vt)   
        {   
        case VT_BOOL:   
            {   
                bValue  = (vtFld.boolVal!=0)?1:0;   
                break;   
            }   
        case VT_I2:   
        case VT_UI1:   
            {   
                bValue  = (vtFld.iVal>0)?1:0;   
                break;   
            }   
        case VT_NULL:   
        case VT_EMPTY:   
            {   
                bValue  = 0;   
                break;   
            }   
        default: bValue = (BYTE)vtFld.iVal;   
        }      
        return true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, UINT& ulValue)   
{   
    ulValue = 0L;   
    try  
    {   
        _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))   
            ulValue = vtFld.lVal;   
        return  true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, DOUBLE& dbValue)   
{   
    dbValue=0.0L;   
    try  
    {   
        _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        switch(vtFld.vt)   
        {   
        case VT_R4:dbValue  = vtFld.fltVal;break;   
        case VT_R8:dbValue  = vtFld.dblVal;break;   
        case VT_DECIMAL:   
            {   
                dbValue  = vtFld.decVal.Lo32;   
                dbValue *= (vtFld.decVal.sign==128)?-1:1;   
                dbValue /= pow((float)10,vtFld.decVal.scale);   
            }   
            break;   
        case VT_UI1:dbValue = vtFld.iVal;break;   
        case VT_I2:   
        case VT_I4:dbValue  = vtFld.lVal;break;   
        case VT_NULL:   
        case VT_EMPTY:dbValue   = 0.0L;break;   
        default:dbValue = vtFld.dblVal;   
        }   
        return true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, LONG& lValue)   
{   
    lValue  = 0L;   
    try  
    {   
        _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))   
            lValue  = vtFld.lVal;   
        return  true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, DWORD& dwValue)   
{   
    dwValue = 0L;   
    try  
    {   
        _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))   
            dwValue = vtFld.ulVal;   
        return  true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, __int64& llValue)   
{   
    llValue = 0L;   
    try  
    {   
        _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY))   
            llValue=vtFld.lVal;   
  
        return  true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, COleDateTime& Time)   
{   
    try  
    {   
        _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        switch(vtFld.vt)    
        {   
        case VT_DATE:   
            {   
                COleDateTime    TempTime(vtFld);   
                Time    = TempTime;   
            }break;   
        case VT_EMPTY:   
        case VT_NULL:Time.SetStatus(COleDateTime::null);break;   
        default: return false;   
        }   
        return  true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   
}   
  
bool CDBAdo::GetFieldValue(LPCTSTR lpcsrFieldName, bool& bValue)   
{   
    try  
    {   
        _variant_t  vtFld   = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value;   
        switch(vtFld.vt)    
        {   
        case VT_BOOL:bValue=(vtFld.boolVal==0)?false:true;break;   
        case VT_EMPTY:   
        case VT_NULL:bValue = false;break;   
        default:return false;   
        }   
  
        return  true;   
    }   
    catch(_com_error& comError)   
    {   
        RecordErrorMsg(comError);   
    }   
  
    return  false;   

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xianglitian/archive/2010/05/22/5617173.aspx