17,140
社区成员




int ncount = 0;
_variant_t varparam;
_bstr_t bstr;
while (!(m_recordset == NULL))
{
long colnum = m_recordset->Fields->Count;//去表格列数
if (colnum == 0) break;
//std::cout < < "\n--------------#table" < < ++ncount < < "-----------\n";
for (int j=0; j <colnum; j++)
{
varparam = m_recordset->Fields->GetItem((long)j)->Name;//获取列名
//输出列名
}//for ------- 这个 for 应该在这里结果
while (!m_recordset->adoEOF)
{
for (int i=0; i <colnum; i++)
{
varparam.Clear();
varparam = m_recordset->GetFields()->GetItem((long)i)->Value;//获取表格单元格内容
if (varparam.vt != VT_NULL)
bstr = varparam;
else
bstr = "NULL";
//printf(" %s ",(const char*)bstr);;//输出表格单元格内容
}//for
m_recordset->MoveNext();
}//while
long lngRec = 0;
m_recordset = m_recordset->NextRecordset((VARIANT *)lngRec);//获取下一个游标集合???获取不到
}//while
--这个是我的sp
create or replace procedure my_proc
(
v_id number
,v_f3 out sys_refcursor
,v_f4 out sys_refcursor
)
as
begin
open v_f3 for select * from test_table where id>v_id;
open v_f4 for select * from test_table2 where id>2*v_id;
end;
_RecordsetPtr m_recordset;
_ConnectionPtr m_connection;
_CommandPtr m_command;
m_connection.CreateInstance(__uuidof(Connection));
m_command.CreateInstance(__uuidof(Command));
//m_recordset.CreateInstance(__uuidof(Recordset));
//...初始化环境...
m_connection->Open("Provider=OraOLEDB.Oracle.1;Use ID=scott;Password=dba123;Data Source=ora1;PLSQLRSet=1", "scott", "dba123", NULL);
m_command->ActiveConnection = m_connection;
m_command->CommandText = "{call my_proc(24)}";//存储过程
//m_command->PutCommandType(adCmdText);
m_recordset = m_command->Execute(0,0,adCmdUnknown);
//
//取存储过程中游标的值
if (m_recordset->Fields->Count == NULL || m_recordset->Fields->Count==0)
{
//std::cout < < "没结果集" < < std::endl;
//CString str = "没有结果集";
}
else
{
int ncount = 0;
_variant_t varparam;
_bstr_t bstr;
while (!(m_recordset == NULL))
{
long colnum = m_recordset->Fields->Count;//去表格列数
if (colnum == 0) break;
//std::cout < < "\n--------------#table" < < ++ncount < < "-----------\n";
for (int j=0; j <colnum; j++)
{
varparam = m_recordset->Fields->GetItem((long)j)->Name;//获取列名
while (!m_recordset->adoEOF)
{
for (int i=0; i <colnum; i++)
{
varparam.Clear();
varparam = m_recordset->GetFields()->GetItem((long)i)->Value;//获取表格单元格内容
if (varparam.vt != VT_NULL)
bstr = varparam;
else
bstr = "NULL";
//printf(" %s ",(const char*)bstr);;//输出表格单元格内容
}//for
m_recordset->MoveNext();
}//while
}//for
long lngRec = 0;
m_recordset = m_recordset->NextRecordset((VARIANT *)lngRec);//获取下一个游标集合???获取不到
}//while
}
return 0;