db 获取队列

int  DbHelper::GetSqlTempTable(const DeviceCfg &devcfg,const string& sql,map<TString,vector<TString>>& outmap,vector<TString>& mapheader ,string& err ,TString DbDirFile)    

if(dbCon.Open(err)){
                try{
                    int rowIndex =0;
                    _RecordsetPtr pRecordset = dbCon.ExecSql(sql);
                    //获取列名
                    if(pRecordset)
                    {
                        int count =pRecordset->Fields->GetCount();
                        for(int i = 0; i <count ; i++)
                        {
                            BSTR    bstrColName;
                            FieldPtr fieldPtr= pRecordset->Fields->GetItem(_variant_t((long)i));
                            if(fieldPtr){
                                fieldPtr->get_Name(&bstrColName);
                                string colName =_com_util::ConvertBSTRToString(bstrColName);
                                //colName.append((LPCSTR)bstrColName,strlen((LPCSTR)bstrColName));
                                TString tscolName =utils::ASCIIToUNICODE(colName);
                                if(outmap.find(tscolName) == outmap.end()){
                                    vector<TString> tempvec;
                                    outmap[tscolName] =tempvec;
                                    mapheader.push_back(tscolName);
                                }
                            }
                            fieldPtr->Release();
                        }
                    }else{
                        err="sql 执行为空";
                        return -1;
                    }
                    while (pRecordset &&!pRecordset->adoEOF){
                        for(int i = 0; i < pRecordset->Fields->GetCount(); i++)
                        {
                            TString tscolName ;
                            string result;
                            BSTR    bstrColName;
                            FieldPtr fieldPtr= pRecordset->Fields->GetItem(_variant_t((long)i));
                            if(fieldPtr){
                                fieldPtr->get_Name(&bstrColName);
                                string colName =_com_util::ConvertBSTRToString(bstrColName);
                                tscolName =utils::ASCIIToUNICODE(colName);
                                if(outmap.find(tscolName) == outmap.end()){
                                    vector<TString> tempvec;
                                    outmap[tscolName] =tempvec;
                                }
                            }
                            fieldPtr->Release();
                            if(pRecordset->GetCollect(_variant_t((long)i)).vt != VT_NULL)                           
                            {
                                _bstr_t value = (_bstr_t)pRecordset->GetCollect(_variant_t((long)i));
                                if(strlen((LPCSTR)value) > 0){
                                    result= value;
                                }
                            } 
                            outmap[tscolName].push_back(utils::ASCIIToUNICODE(result));
                        }
                        rowIndex++;
                        pRecordset->MoveNext();
                        if(count++ >1000)
                            break;
                    }
                    dbCon.CloseDataSet(pRecordset!=NULL);
                }
                catch(_com_error& e) 
                {
                    LOG_ERR(_T("com_err %s"),(TCHAR*)e.Description());
                    err = utils::SZFormat("com_err %s",e.Description());
                    return -2;
                } 
                catch(...){
                    err = "未知错误";
                }
            }else{
                return -2;
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值