呵呵,我以前回答过:用 ADOX (Microsoft® ActiveX® Data Objects Extensions for Data Definition Language and Security) 吧。ADOX 是对 ADO 的一个扩展,动态连接库为 MSADOX.DLL;随 MSDAC (Microsoft Data Access Components) 安装;最新的版本可到http://www.microsoft.com/data 取下载;VB 安装后,默认情况下 MDAC_TYP.EXE 拷贝到 X:\Program Files\Microsoft Visual Studio\VB98\Wizards\PDWizard\Redist 目录下。关于 ADOX 的参考资料,请看 msdn ADO Reference。
CoInitialize(NULL);
_RecordsetPtr pRecordset;
_ConnectionPtr pConn;
_ParameterPtr pParam;
ParametersPtr pParameters;HRESULT hr;
hr = pConn.CreateInstance(__uuidof(Connection));
pConn->Open("DSN=test1;UID=sa;PWD=pwd;","sa","");
if (FAILED(hr))
{
AfxMessageBox("Cann't create connection object!");
return false;
}_CommandPtr pComm;
hr = pComm.CreateInstance(__uuidof(Command));
if (FAILED(hr))
{
AfxMessageBox("create command object failled!");
return false;
}pComm->ActiveConnection = pConn;
pComm->CommandText = "test1";
pComm->CommandType = adCmdStoredProc;
pParam = pComm->CreateParameter(_bstr_t("thecol1"),adInteger,adParamInput,sizeof(_variant_t),3L);
pParameters = pComm->Parameters;
pParameters->Append(pParam);_variant_t theRows;
_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;
// pRecordset->CursorType = adOpenKeyset;
pRecordset = pComm->Execute(&theRows,&vNull,adCmdStoredProc);// pRecordset->MoveFirst();
while(!pRecordset->ADOEOF)
{
int theid;
_variant_t vTemp;
theid = pRecordset->Fields->Item["col1"]->Value.intVal;
vTemp = pRecordset->Fields->Item["col2"]->Value;
str = vTemp.bstrVal;
pRecordset->MoveNext();
}
return true;
此段代码可以正常执行,检索的记录集有四条记录,但是如果在while语句前用了MoveFirst(),程序在执行MoveFirst()语句时出现 Runtime error!。我怀疑是游标不支持,于是又在前面加上 pRecordset->CursorType = adOpenKeyset; 但是程序执行该语句时也不行,同样出现 Runtime error!请教各位大侠,这到底怎么了?怎样用才正确?