VS2010 中ADO获取记录集的列名总是出错解决方案

VS2010 中ADO获取记录集的列名总是出错
ado.m_pRecordset=ado.GetRecordSet(_bstr_t(sql));
//设置新的列名
BSTR bstrColname;
LVCOLUMN m_ColText;
FieldPtr field = NULL;
for (int i=0;i<ado.m_pRecordset->Fields->Count;i++)
{
->>>>> _bstr_t table_name=ado.m_pRecordset->Fields->Item[i]->Name;
//field=ado.m_pRecordset->GetFields();
//field.Item[i]->get_Name(&bstrColname);
CString temp=bstrColname;
m_ColText.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT;
m_ColText.cx=100;
m_ColText.pszText=bstrColname;
m_ListSales.SetColumn(i,&m_ColText);
}

  总是在标记那行出错,断点调试显示错误是在如下代码处
  inline FieldPtr Fields15::GetItem ( const _variant_t & Index ) 
  {
  struct Field * _result = 0;
  HRESULT _hr = get_Item(Index, &_result);
  if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
 ->>> return FieldPtr(_result, false);
  }

  网上介绍的几种方法都试过了,都是在这个地方出错,难道是索引出了问题,不是从0开始?
  就剩这么多分了,谢谢了

------解决方案--------------------
_bstr_t adostr = (_bstr_t)pRes->Fields->GetItem("FieldName")->Value;
CString tmp = adostr.copy();
------解决方案--------------------
ADO对int不支持,换成long就好了。
C/C++ code
for (int i=0;i<ado.m_pRecordset->Fields->Count;i++)
//-》
for (long i=0;i<ado.m_pRecordset->Fields->Count;i++)