用ADO访问SQL数据库时,调用存储过程,得到记录集后,用m_pRecordset->GetRecordCount得到的记录数为-1,所以就用pRecordset->Next()遍历了一遍记录集,得到正确的记录数,但是现在需要将记录集中所有字段的值取出来,因为之前遍历过一次,我想需要将指针用m_pRecordset->First()移动到第一条记录才能取值。
但是m_pRecordset->MoveFirst()就出错,这是为什么?我应该怎么做
但是m_pRecordset->MoveFirst()就出错,这是为什么?我应该怎么做
m_pRecordset-> MoveFirst();
while(!m_pRecordset-> adoEOF)
{
//your code
m_pRecordset-> MoveNext();
}
{
while(!m_pRecordset->adoEOF)//EOF重定义成adoEOF
{
RecordCount++;
m_pRecordset->MoveNext();
}
}
else
{
AfxMessageBox(_T("记录集为空"));
return FALSE; }
m_pRecordset->MoveFirst();在这里出错 while(!m_pRecordset->adoEOF)//遍历所有记录
{
mycode;
m_pRecordset->MoveNext();
}
try{
m_pRecordset->MoveFirst();
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}就可以看到出错原因了,估计都是游标问题
打开数据库的时候需要指定好 具体方法忘了 Google一下
{
while(!m_pRecordset->adoEOF)//EOF重定义成adoEOF
{
RecordCount++;
m_pRecordset->MoveNext();
}
}
else
{
AfxMessageBox(_T("记录集为空"));
return FALSE;}
你把这段先注释 运行看看 上面的资源分很高 如果没分了,就发我邮箱 我发你一份[email protected]
然后用下面的代码就可以了
while(!m_pRecordset-> adoEOF)
{
//your code
m_pRecordset-> MoveNext();
}
首先连接数据库后,然后用m_pRecordset->Open函数,函数将第一个参数直接写成执行存储过程的语句“exec ProcName,paramtername”这样可以得到正确的记录集个数,并可以得到正确的结果。
前提是我的存储过程已经在服务器的SQL2000的数据库中写好了
在m_pRecordset->Open()前加上:
//设置好游标(静态/客户)
m_pRecordset->CursorType = adOpenStatic;
m_pRecordset->CursorLocation = adUseClient;