ADO连接数据库
三种数据库访问技术:
ODBC(Open Database Connectivity,开放式数据库连接),是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的标准应用程序接口(API)。
DAO(Data Access Object )即数据访问对象集,是Microsoft提供的基于一个数据库对象集合的访问技术。和ODBC一样,他们都是Windows API的一部分,可以独立于(DBMS)进行数据库的访问。
DAO跟ODBC的区别是:
访问机制不同~ODBC工作依赖于数据库制造商提供的驱动程序。使用ODBC API的时候,Windows的ODBC管理程序,把对数据库的访问请求传递给正确的驱动程序,驱动程序再使用SQL语句指示DBMS完成数据库访问工作。DAO则绕开中心环节,直接使用数据库引擎(Microsoft Jet Database Engine)提供的数据库访问对象集进行工作。速度比ODBC快。
ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,提供了简单易用的访问各种数据资源(包括关系型和非关系型)。是相对比较新的数据库访问技术。
ADO连接数据库应用程序需要进行以下步骤:
(1) 初始化COM库,利用预编译#import引入ADO库定义文件 #import "D:\Program Files\Common Files\System\ado\msado15.dll" no_namespace
rename("EOF","EndOfFile") rename("BOF","FirstOfFile")
#include "icrsint.h"
在应用程序的初始化函数中对COM库进行初始化。以下两种方法都可以,但是初始化是必须的,一定要记得加。
BOOL CAdoTestApp::InitInstance()
{
// 方法1
::CoInitialize(NULL);
/* 方法2
if(!AfxOleInit())
{
AfxMessageBox("COM Error!");
return FALSE;
}*/
…..
}
(2)用Connection对象连接数据库
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance(_uuidof(Connection));
m_ pConnection ->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = D:\\Documents
and Settings\\y\\My Documents\\student.mdb;","","",-1);
其中_ConnectionPtr是一个接口,类似于ODBC中的CDatabase类,首先创建一个该接口,接着打开某个指定的数据源。也即是完成数据库的连接。跟_RecordsetPtr,_CommandPtr接
口一起来执行任务。因使用方便,也有人把它跟叫做智能指针。 (3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset
对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。
ADO连接数据库工程代码实例:
首先Access建立如下数据库student.mdb 添加表stu_info:
1 建立一个基于对话框的MFC应用程序,并设计如下对话框界面。
关联变量:
2 引入ADO库定义文件,并初始化COM库。 引入ADO库文件:
#import "D:\Program Files\Common Files\System\ado\msado15.dll" no_namespace
rename("EOF","EndOfFile") rename("BOF","FirstOfFile") #include "icrsint.h"
对应图例:
BOOL CAdoTestApp::InitInstance()
{
::CoInitialize(NULL);
/*if(!AfxOleInit())
{
AfxMessageBox("COM Error!");
return FALSE;
}*/
AfxEnableControlContainer();
对应图例:
3添加数据库连接代码:
m_pCon.CreateInstance(_uuidof(Connection));
m_pCon->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source = D:\\Documents and
Settings\\y\\My Documents\\student.mdb;","","",-1);
m_pRs.CreateInstance(_uuidof(Recordset));
m_pRs->Open("select * from
stu_info",m_pCon.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
m_pRs->MoveFirst();
DisplayFields();
4 添加对话框成员函数DisplayFields:负责显示对应表中的记录信息。 void CAdoTestDlg::DisplayFields()
{
vFieldValue= m_pRs->GetCollect("学号");
strFieldValue=(char*)_bstr_t(vFieldValue);
m_Sno=strFieldValue;
vFieldValue.Clear();
vFieldValue= m_pRs->GetCollect("姓名");
strFieldValue=(char*)_bstr_t(vFieldValue);
m_Name=strFieldValue;
vFieldValue.Clear();
vFieldValue= m_pRs->GetCollect("出生日期");
strFieldValue=(char*)_bstr_t(vFieldValue);
m_birthday=strFieldValue;
vFieldValue.Clear();
vFieldValue= m_pRs->GetCollect("四级成绩");
strFieldValue=(char*)_bstr_t(vFieldValue);
m_EnglishGrade=strFieldValue;
vFieldValue.Clear();
vFieldValue= m_pRs->GetCollect("VC成绩");
strFieldValue=(char*)_bstr_t(vFieldValue);
m_ComputerGrade=strFieldValue;
vFieldValue.Clear();
UpdateData(FALSE);
}
5 按钮响应函数
void CAdoTestDlg::OnButton1() // 向后 {
// TODO: Add your control notification handler code here
m_pRs->MoveNext();
if(m_pRs->EndOfFile==VARIANT_FALSE)
DisplayFields();
else
{
m_pRs->MovePrevious();
AfxMessageBox("已经到最后一条记录!");
}
}
void CAdoTestDlg::OnButton2() // 向前 {
m_pRs->MovePrevious();
if(m_pRs->FirstOfFile==VARIANT_FALSE)
DisplayFields();
else
{
m_pRs->MoveNext();
AfxMessageBox("已经到第一条记录!");
}
}
void CAdoTestDlg::OnButton3() //添加
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_pRs->AddNew();
m_pRs->PutCollect("学号",_variant_t(m_Sno));
m_pRs->PutCollect("姓名",_variant_t(m_Name));
m_pRs->PutCollect("出生日期",_variant_t(m_birthday));
m_pRs->PutCollect("四级成绩",_variant_t(m_EnglishGrade));
m_pRs->PutCollect("VC成绩",_variant_t(m_ComputerGrade));
m_pRs->Update();
m_Sno = " ";
m_Name= " ";
m_birthday = " ";
m_EnglishGrade = " ";
m_ComputerGrade = " ";
UpdateData(FALSE);
}
void CAdoTestDlg::OnButton4()
{
// TODO: Add your control notification handler code here.;
m_pRs->Delete(adAffectCurrent);
m_Sno = " ";
m_Name= " ";
m_birthday = " ";
m_EnglishGrade = " ";
m_ComputerGrade = " ";
UpdateData(FALSE);
}
程序运行结果如下:
本文档为【ADO连接数据库】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。