MFC

ADO 连接数据库

2011/1/30

引入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;
	}

}