请教多条件查询优化问题
前提:
1.使用ADO编程访问access数据库
2.实现语言转换,例如我现在有一个数组CString Lang1[100],还有一张中英文对照表language,结构为:sLanguage,chinese,english等语言字段.
3.调用函数ChangeLanguage(CString *sLang,CString *dLang,int size,CString Language);//实现语言转换
CString *sLang//原始语言
CString *dLang//目标语言
int size;//语言数,也即字符串数(数组长度)
CString Language;//语言类型
我的相法是这样的:
BOOL ChangeLanguage(CString *sLang,CString *dLang,int size,CString Language)
{
_ConnectionPtr m_pConnection;
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=language.mdb","","",adModeUnknown);
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
CString csSql;
_variant_t var;
方法一:
for(int i=0;i<size;i++)
{
csSql.Format("Select * From Language where sLanguage='%s'",sLang[i]);
m_pRecordset->Open(_bstr_t(cmd),theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
var=m_pRecordset->GetCollect(_bstr_t(Language));
if(var.vt!=VT_NULL)
dLang[i]=(LPCSTR)_bstr_t(var);
else
dLang[i].Empty();
m_pRecordset->Cloes();
}
}
catch(_com_error e)
{
AfxMessageBox("错误信息!");
return FALSE;
}
return TRUE;
}
方法二:
csSql.Format("Select * From Language where sLanguage='%s'",sLang[0]);
for(int i=0;i<size;i++)
{
csSql.Format(" or sLanguage='%s'",sLang[i]);
}
m_pRecordset->Open(_bstr_t(cmd),theApp.m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
while(!m_pRecordset->adoEOF)
{
var=m_pRecordset->GetCollect(_bstr_t(Language));
if(var.vt!=VT_NULL)
dLang[i]=(LPCSTR)_bstr_t(var);
else
dLang[i].Empty();
m_pRecordset->MoveNext();
}
m_pRecordset->Cloes();
方法一:实现起来速度有点慢,原数组很多的情况下;
方法二:同样在数组很多的情况下,条件太长会不会有问题,还有这样获得的结果排序也存在问题,会跟原语言对不上,即第一个源字符串,与第一个目标字符串不对应了。也考虑过采用in关键字但排序问题还是存在
不知可不可以采用m_pConnection->execl()方法来实现呢,这样就不用重复打开表了,可以的话请给个例子,谢谢
请大家多给些意见,帮忙想下办法,先在此谢过大家了!