MFC
ADO 连接数据库
引入ado动态链接库代码:
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF") rename("BOF", "adoBOF")
连接和断开数据库代码:
CoInitialize(NULL);
CoUninitialize();
连接字串:
Access:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=数据库完整名(包括扩展名)
完整代码:
创建连接对象实例和创建记录集实例:
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
打开数据库完整代码(Access):
方式一:
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
pConn->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TeacherDB.mdb";
pConn->Open("","","",adModeUnknown);
方式二:
_RecordsetPtr m_pRecordset;
_ConnectionPtr m_pConnection;
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=完整数据库名";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库路径是否正确!");
}
查询:
pRst = pConn->Execute("select * from 表名",NULL,adCmdText);
while(!pRst->adoEOF)
{
//这里是对MFC List控件的操作
((CListBox*)GetDlgItem(IDC_LIST2))->AddString(
(_bstr_t)pRst->GetCollect("字段名"));
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
综合数据库控制和连接类:
class CADOConn
{
public:
_RecordsetPtr m_pRecordset;
_ConnectionPtr m_pConnection;
public:
CADOConn();
virtual ~CADOConn();
void OnInitADOConn();
_RecordsetPtr& GetRecordset(_bstr_t bstrSQL);
BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();
};
CADOConn::CADOConn()
{
}
CADOConn::~CADOConn()
{
}
void CADOConn::OnInitADOConn()
{
//
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=TeacherDB.mdb";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库路径是否正确!");
}
}
void CADOConn::ExitConnect()
{
//关闭记录集和连接
if(m_pRecordset!=NULL)
m_pRecordset->Close();
m_pConnection->Close();
//释放环境
::CoUninitialize();
}
_RecordsetPtr& CADOConn::GetRecordset(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)
OnInitADOConn();
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox("不能打开记录集!");
}
return m_pRecordset;
}
BOOL CADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)
OnInitADOConn();
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
AfxMessageBox("不能打开记录集!");
return false;
}
}