_variant_t RecordsAffected; m_pRsInfo=m_pConInfo->Execute((LPCTSTR)strSql,&RecordsAffected,adCmdText); int i =0; while (m_pRsOSInfo->EndOfFile == VARIANT_FALSE) { i++; m_pRsInfo->MoveNext(); } 这是它前面的语句,应该是打开的
_variant_t RecordsAffected; m_pRsInfo=m_pConInfo->Execute((LPCTSTR)strSql,&RecordsAffected,adCmdText); int i =0; while (m_pRsInfo->EndOfFile == VARIANT_FALSE) { i++; m_pRsInfo->MoveNext(); } 这是它前面的语句,应该是打开的
m_pRs->PutRefActiveConnection(m_pConn); CString t = "select * from case_acceptinfo"; m_pRs->Open(_variant_t(t),_variant_t((IDispatch*)m_pConn,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
呵呵,附上我的代码,请高手帮我看看怎么优化,我的代码有些冗杂,主要功能就是先查找,如果数据库里面没有数据就添加 CString strSql; strSql.Format("select * from Info where Type = '%s' and Version = '%s'",pInfo->GetType(),pInfo->GetVersion()); BSTR bsSql = strSql.AllocSysString(); _variant_t RecordsAffected; // m_pRsInfo=m_pConInfo->Open((LPCTSTR)strSql,&RecordsAffected,adCmdText); // m_pConOSInfo->Open((_variant_t)strSql,) m_pConInfo->Open(_variant_t(strSql),_variant_t((IDispatch*)m_pConInfo,true),adOpenDynamic,adLockOptimistic,adCmdUnknown); int i =0; while (m_pRsInfo->EndOfFile == VARIANT_FALSE) { i++; m_pRsInfo->MoveNext(); } m_pRsInfo->MoveFirst(); if (i ==0) { try { m_pRsInfo->AddNew(); m_pRsInfo->PutCollect("OSType", _variant_t(pInfo->GetType())); m_pRsInfo->PutCollect("OSVersion", _variant_t(pInfo->GetVersion())); m_pRsInfo->Update(); } catch(_com_error *e) {
m_pRsInfo=m_pConInfo->Execute((LPCTSTR)strSql,&RecordsAffected,adCmdText);
int i =0;
while (m_pRsOSInfo->EndOfFile == VARIANT_FALSE)
{
i++;
m_pRsInfo->MoveNext();
}
这是它前面的语句,应该是打开的
m_pRsInfo=m_pConInfo->Execute((LPCTSTR)strSql,&RecordsAffected,adCmdText);
int i =0;
while (m_pRsInfo->EndOfFile == VARIANT_FALSE)
{
i++;
m_pRsInfo->MoveNext();
}
这是它前面的语句,应该是打开的
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")正式代码:
_RecordsetPtr m_pRs;
_ConnectionPtr m_pConn;
try
{
CoInitialize(NULL); m_pConn.CreateInstance(__uuidof(Connection));
m_pRs.CreateInstance(__uuidof(Recordset));
//设置服务器端游标
m_pConn->CursorLocation = adUseServer;//adUseClient;adUseNone
//连接数据库
m_pConn->Open(L"Provider=SQLOLEDB.1;Password=a;Persist Security Info=True;User ID=sa;Initial Catalog=tanyizhiDB;Data Source=192.168.1.23",L"",L"",adOpenUnspecified);
m_pRs->PutRefActiveConnection(m_pConn);
CString t = "select * from case_acceptinfo";
m_pRs->Open(_variant_t(t),_variant_t((IDispatch*)m_pConn,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
while(!m_pRs->adoEOF)
{
CString m_s1 = _com_util::ConvertBSTRToString((_bstr_t)m_pRs->GetCollect("reporttime"));
MessageBox(m_s1); m_pRs->MoveNext();
} m_pRs->Close();
m_pConn->Close(); m_pRs=NULL;
m_pConn=NULL;
CoUninitialize();
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
}
CString strSql;
strSql.Format("select * from Info where Type = '%s' and Version = '%s'",pInfo->GetType(),pInfo->GetVersion());
BSTR bsSql = strSql.AllocSysString();
_variant_t RecordsAffected;
// m_pRsInfo=m_pConInfo->Open((LPCTSTR)strSql,&RecordsAffected,adCmdText);
// m_pConOSInfo->Open((_variant_t)strSql,)
m_pConInfo->Open(_variant_t(strSql),_variant_t((IDispatch*)m_pConInfo,true),adOpenDynamic,adLockOptimistic,adCmdUnknown);
int i =0;
while (m_pRsInfo->EndOfFile == VARIANT_FALSE)
{
i++;
m_pRsInfo->MoveNext();
}
m_pRsInfo->MoveFirst();
if (i ==0)
{
try
{
m_pRsInfo->AddNew();
m_pRsInfo->PutCollect("OSType", _variant_t(pInfo->GetType())); m_pRsInfo->PutCollect("OSVersion", _variant_t(pInfo->GetVersion()));
m_pRsInfo->Update();
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
return FALSE;
}
return TRUE;
}
else return FALSE;
如果你在stdafx.h中加入
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
那么
while(!pRs->adoEOF)
2.为什么不用Execute(sql)或者rs.open(sql)来执行,多方遍阿