ADO数据库更新和查询函数代码,查询的结果存放在vector容器中.vector类似二维动态增长数组,可以这样来粗略理解。

//更新数据
bool dxDb::DataUpdate(const char* sTable,const char* sSetVal,const char* sCondi)
{
    char sql_str[512]="";
    char condi[128]="";
    if (sCondi[0])
        sprintf_s(condi,128," where %s",sCondi);
else
    sprintf_s(condi,128," %s",sCondi);
    sprintf_s(sql_str,512,"update %s set %s %s",sTable,sSetVal,condi);
    try
    {
        m_pConn->Execute(sql_str,NULL,adCmdText);
    }
    catch(_com_error e)
    {
        string errstr = e.Description();
        ::MessageBox(NULL,errstr.c_str(),"数据更新错误提示",MB_OK | MB_ICONERROR);
        return false;
    }
    return true;
}
//查询数据
bool dxDb::DataQuery(const char* sTable,const char* sDst,const char* sCondi,std::vector<std::vector<_variant_t> > &vData)
{
    char sql_str[512]="";
    char condi[128]="";
    if (sCondi[0])
        sprintf_s(condi,128," where %s",sCondi);
    else
        sprintf_s(condi,128," %s",sCondi);
    sprintf_s(sql_str,512,"select %s from %s %s",sDst,sTable,condi);

    _RecordsetPtr pRst(__uuidof(Recordset));
    try
    {
        pRst = m_pConn->Execute(sql_str,NULL,adCmdText);
    }
    catch(_com_error e)
    {
        string errstr = e.Description();
        ::MessageBox(NULL,errstr.c_str(),"数据查询错误提示",MB_OK | MB_ICONERROR);
        return false;
    }
    //读取数据
    try
    {
        vData.clear();//自动清除容器中的数据,免得使用时忘记清除导致数据错误,每一个表的数据容器
        std::vector<_variant_t> rowdata;//每一行的数据容器
        int col_number = pRst->Fields->Count;//得到结果集表的总列数
        while(!(pRst->adoEOF))
        {
            rowdata.clear();
            for(int col_index =0;col_index<col_number;col_index++)
            { 
                _variant_t coldata = pRst->GetCollect(_variant_t((long)col_index));//通过给出列的序号(从0开始)或者列名来检索字符串
                rowdata.push_back(coldata);
            }
            vData.push_back(rowdata);
            pRst->MoveNext();
        }
    }
    catch(_com_error e)
    {
        string errstr = e.Description();
        ::MessageBox(NULL,errstr.c_str(),"数据读取错误提示",MB_OK | MB_ICONERROR);
        pRst->Close();
        return false;
    }
    pRst->Close();
    return true;
}