新手学习C++与Access数据库连接。遇问题求助
后浪如何浪 2016-03-11 01:44:25 编写的控制台应用程序,运行后总是出各种问题,有时候可以写入数据,有时候又会失败,关闭记录集指针也总是出问题。求大牛帮忙调试下程序,并指导下,我对数据库也不是很了解。
#include <icrsint.h>
#include<iostream>
#include "stdafx.h"
#include "string.h"
using namespace std;
class CADO
{public:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
public :
void Connect(void);
void ExitConnect(void);
_RecordsetPtr&GetRecordset(_bstr_t SQL);
};
/* 建立数据库连接*/
void CADO::Connect(void)
{
try{::CoInitialize(NULL);//初始化com环境
m_pConnection.CreateInstance(__uuidof(Connection));//创建连接对象
m_pConnection->Open("Provider=Microsoft Office 12.0 Access Database Engine OLE DB Provider;Data Source=F:\\VC_work\\Northwind.mdb","","",adModeUnknown);
}
catch(_com_error e)
{
cout<<"连接数据库失败!错误信息:"<<e.ErrorMessage()<<endl;
return;
}
cout<<"连接成功!"<<endl;
}
void CADO:: ExitConnect(void)
{
if(!m_pRecordset->adoEOF)
{//m_pRecordset.Release();
m_pRecordset->Close();
m_pConnection->Close();
}
::CoUninitialize();//释放环境
}
/*得到记录集*/
_RecordsetPtr& CADO ::GetRecordset(_bstr_t SQL)
{_variant_t ra;
try{if (m_pConnection==NULL)
Connect();
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordset->Open(SQL,/*_variant_t((IDispatch*)m_pConnection,true)*/m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
printf("错误信息:%s",e.Description());
cout<<"错误信息:"<<e.ErrorMessage()<<endl;
}
return m_pRecordset;
}
class stu:public CADO
{
private:
long ID;
string Name;
long Age;
public:
stu(){ID=0;Name="**";Age=0;}
stu(int id,string name,int age){ID=id;Name=name;Age=age;}
void writedata(_bstr_t SQLl);
};
void stu::writedata(_bstr_t SQLl)
{
Connect();
GetRecordset(SQLl);
while(!m_pRecordset->adoEOF)
m_pRecordset->MoveNext();
m_pRecordset->AddNew();///添加新记录
m_pRecordset->PutCollect("ID",_variant_t((long)(ID)));
m_pRecordset->PutCollect("Name",_variant_t("na"));
m_pRecordset->PutCollect("Age",_variant_t((long)(Age)));
}
void main()
{
stu s1(1,"dd",3);
s1.writedata("SELECT * FROM 表1");
s1.ExitConnect();