ADO高手请看过来
jun 2000-07-05 11:30:00 在VC中用ADO调用 MS SQL Server的存储过程,代码如下:
CString str;
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!请教各位大侠,这到底怎么了?怎样用才正确?