3,881
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <atlstr.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
::CoInitialize(NULL);
_ConnectionPtr m_pConnection;
HRESULT hr=m_pConnection.CreateInstance(__uuidof(Connection));
if(!SUCCEEDED(hr))
{
cout<<"不成功"<<endl;
::CoUninitialize();
cin.get();
return 0;
}
try
{
m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=database.xlsx;Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"","","",adModeUnknown);
}
catch(_com_error e) //捕捉异常
{
CString strError;
strError.Format( "连接数据库发生异常! \r \n错误信息:%s", e.ErrorMessage( ) );
cout<<strError; //显示错误信息
::CoUninitialize();
cin.get();
return 0;
}
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
CString strSQL=_T("select* from [Sheet1$]");
try
{
m_pRecordset->Open(_variant_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e) //捕捉异常
{
CString strError;
strError.Format( "连接数据库发生异常! \r \n错误信息:%s", e.ErrorMessage( ) );
cout<<strError; //显示错误信息
::CoUninitialize();
cin.get();
return 0;
}
while(!m_pRecordset->adoEOF)
{
//m_pRecordset->MoveFirst();
_variant_t temp =m_pRecordset->GetCollect("F1");
if(temp.vt != VT_NULL)
{
CString strl=(CString)temp;
_variant_t temp_t =m_pRecordset->GetCollect("F2");
if(temp_t.vt != VT_NULL)
{
cout<<strl<<" ";
}
else
{
cout<<strl<<endl;
}
}
_variant_t temp_t =m_pRecordset->GetCollect("F2");
if(temp_t.vt != VT_NULL)
{
CString strl=(CString)temp_t;
_variant_t temp_th =m_pRecordset->GetCollect("F3");
if(temp_th.vt != VT_NULL)
{
cout<<strl<<" ";
}
else
{
cout<<strl<<endl;
}
}
_variant_t temp_th =m_pRecordset->GetCollect("F3");
if(temp_th.vt != VT_NULL)
{
CString strl=(CString)temp_th;
cout<<strl<<endl;
}
m_pRecordset->MoveNext();
}
m_pConnection->Close();
m_pConnection= NULL;
::CoUninitialize();
cin.get();
return 0;
}
m_pRecordset->Open("[dsds$]",m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenKeyset,//adOpenDynamic,adOpenKeyset
adLockReadOnly,
adCmdTable);FieldsPtr fldLoop = NULL;
_variant_t Index;
Index.vt = VT_I2;
vector<pair<DataTypeEnum,string> > m_tableinfo;
fldLoop = m_pRecordset->GetFields();
int ncnt = (int)fldLoop->GetCount();
for (int i = 0; i < ncnt; i++)
{
Index.iVal=i;
//这里一定要一个variant?
string fldname = fldLoop->GetItem(Index)->GetName();
DataTypeEnum fldtype = fldLoop->GetItem(Index)->Type;
m_tableinfo.push_back(make_pair(fldtype,fldname));
}
我的连接串是这样的adoinfo = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=\"";
adoinfo += Types[m_sExtname] + ";HDR=YES;\";Data Source=" ;
adoinfo += m_sFileName + ";";
注意hdr=yes 没有这个字段名就是f1,f2这样的
之前也有人发过贴了,貌似这边的没多少人会ADO的东西
你换个模块问问吧!帅哥!