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;
}