数据库实验报告ADO连接数据库.docx
- 文档编号:4618992
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:18
- 大小:681.62KB
数据库实验报告ADO连接数据库.docx
《数据库实验报告ADO连接数据库.docx》由会员分享,可在线阅读,更多相关《数据库实验报告ADO连接数据库.docx(18页珍藏版)》请在冰点文库上搜索。
数据库实验报告ADO连接数据库
实验名称
ADO连接数据库
学院
信息科学与工程学院
专业班级
通信班
姓名
学号
《数据库系统概论》实验报告
题目:
ADO连接数据库
姓名
日期
2014年6月10日
实验平台:
VisualStudio2008开发环境;
数据库为微软SQLServer2000
实验目的:
1.在VC开发环境下使用ADO技术连接数据库
2.分别使用Connection、Command和Recordset对象实现对数据库的查询
一、实验内容和要求
通过VS的应用程序向导创建一个对话框应用程序,使用ADO连接数据库。
在对话框上放置三个按钮,分别为使用Connection、Command和Recordset对象实现对数据库的查询。
实现每个对话框的事件处理函数,在每个函数中分别通过Connection、Command和Recordset对象实现对数据库的查询。
二、实验步骤
1.以管理员sa登录数据库,新建scdb数据库,然后运行如下SQL语句,创建我们前几次实验所建立的表。
CREATETABLEcourse(
Cnochar(4)NOTNULL,
Cnamechar(40)DEFAULTNULL,
Cpnochar(4)DEFAULTNULL,
CcreditsmallintDEFAULTNULL,
PRIMARYKEY(Cno)
);
--
--转存表中的数据'course'
--
INSERTINTOcourse(Cno,Cname,Cpno,Ccredit)VALUES
('1','数据库','5',4);
INSERTINTOcourse(Cno,Cname,Cpno,Ccredit)VALUES
('2','数学',NULL,2);
INSERTINTOcourse(Cno,Cname,Cpno,Ccredit)VALUES
('3','信息系统','1',4);
INSERTINTOcourse(Cno,Cname,Cpno,Ccredit)VALUES
('4','操作系统','6',3);
INSERTINTOcourse(Cno,Cname,Cpno,Ccredit)VALUES
('5','数据结构','7',4);
INSERTINTOcourse(Cno,Cname,Cpno,Ccredit)VALUES
('6','数据处理',NULL,2);
INSERTINTOcourse(Cno,Cname,Cpno,Ccredit)VALUES
('7','PASCAL语言','6',4);
INSERTINTOcourse(Cno,Cname,Cpno,Ccredit)VALUES
('8','DB_DESIGN','1',2);
--
--表的结构'sc'
--
CREATETABLEsc(
Snochar(9)NOTNULLDEFAULT'',
Cnochar(4)NOTNULLDEFAULT'',
GradesmallintDEFAULTNULL,
PRIMARYKEY(Sno,Cno),
);
--
--转存表中的数据'sc'
--
INSERTINTOsc(Sno,Cno,Grade)VALUES
('200215121','1',92);
INSERTINTOsc(Sno,Cno,Grade)VALUES
('200215121','2',85);
INSERTINTOsc(Sno,Cno,Grade)VALUES
('200215121','3',88);
INSERTINTOsc(Sno,Cno,Grade)VALUES
('200215122','2',90);
INSERTINTOsc(Sno,Cno,Grade)VALUES
('200215122','3',80);
----------------------------------------------------------
--
--表的结构'student'
--
CREATETABLEstudent(
Snochar(9)NOTNULL,
Snamechar(20)DEFAULTNULLUNIQUE,
Ssexchar
(2)DEFAULTNULL,
SagesmallintDEFAULTNULL,
Sdeptchar(20)DEFAULTNULL,
PRIMARYKEY(Sno),
)
--
--转存表中的数据'student'
--
INSERTINTOstudent(Sno,Sname,Ssex,Sage,Sdept)VALUES
('200215121','李勇','男',20,'CS');
INSERTINTOstudent(Sno,Sname,Ssex,Sage,Sdept)VALUES
('200215122','刘晨','女',19,'CS');
INSERTINTOstudent(Sno,Sname,Ssex,Sage,Sdept)VALUES
('200215123','王敏','女',18,'MA');
INSERTINTOstudent(Sno,Sname,Ssex,Sage,Sdept)VALUES
('200215125','张立','男',19,'IS');
INSERTINTOstudent(Sno,Sname,Ssex,Sage,Sdept)VALUES
('200215128','陈冬','男',18,'IS');
--
--限制表'course'
--
ALTERTABLEcourse
ADDCONSTRAINTcourse_ibfk_1FOREIGNKEY(Cpno)REFERENCEScourse(Cno);
--
--限制表'sc'
--
ALTERTABLEsc
ADDCONSTRAINTsc_ibfk_1FOREIGNKEY(Sno)REFERENCESstudent(Sno);
ALTERTABLEsc
ADDCONSTRAINTsc_ibfk_2FOREIGNKEY(Cno)REFERENCEScourse(Cno);
以管理员sa登录数据库
新建scdb数据库
创建表
2.在应用程序App类的InitInstance()函数中添加如下语句,初始化COM库
AfxOleInit();
新建项目AdoTry
完成MFC应用程序
添加语句AfxOleInit()
3.在stdafx.h中加入如下语句引入ADO类库
#import"c:
\programfiles\commonfiles\system\ado\msado15.dll"no_namespacerename("EOF","adoEOF")
几点说明:
(1) msado15.dll所在的目录
(2) 在编译的时候肯能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告。
msado15.tlh(405) :
warning C4146:
unary minus operator applied to unsigned type, result
引入ADO类库
4.在应用程序的Dlg类的定义中增加三个成员变量:
_ConnectionPtrm_pConnection;
_RecordsetPtrm_pRecordset;
_CommandPtrm_pCommand;
增加成员变量
5.在应用程序的Dlg类的OnInitDialog()函数中末尾添加如下语句:
HRESULThr;
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Driver=SQLServer;Server=localhost;Database=scdb;UID=sa;PWD=abc","","",adModeUnknown);
}
}
catch(_com_errore)///捕捉异常
{
CStringerrormessage;
errormessage.Format("连接数据库失败!
\r\n错误信息:
%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
注意:
上面语句中的数据库的名称和用户名密码要根据实际情况来填写。
m_pConnection->Open("Driver=SQLServer;Server=localhost;Database=scdb;UID=sa;PWD=abc","","",adModeUnknown);
6.在对话框上添加三个按钮,设置按钮上的标题分别为:
“使用Connection对象访问数据库”、“使用Command对象访问数据库”和“使用RecordSet对象访问数据库”。
添加三个按钮
重命名按钮
7.分别双击三个按钮,进入到每个按钮的事件处理函数中,添加如下语句,测试与数据库的查询。
(1)Connection对象
_variant_tRecordsAffected;
m_pRecordset=m_pConnection->Execute("SELECTCOUNT(*)FROMstudent",&RecordsAffected,adCmdText);
_variant_tvIndex=(long)0;
_variant_tvCount=m_pRecordset->GetCollect(vIndex);///取得第一个字段的值放入vCount变量
m_pRecordset->Close();///关闭记录集
CStringmessage;
message.Format("共有%d条记录",vCount.lVal);
AfxMessageBox(message);///显示当前记录条数
(2)Command对象
m_pCommand.CreateInstance("ADODB.Command");
_variant_tvNULL;
vNULL.vt=VT_ERROR;
vNULL.scode=DISP_E_PARAMNOTFOUND;///定义为无参数
m_pCommand->ActiveConnection=m_pConnection;///非常关键的一句,将建立的连接赋值给它
m_pCommand->CommandText="SELECT*FROMstudent";///命令字串
m_pRecordset=m_pCommand->Execute(&vNULL,&vNULL,adCmdText);///执行命令,取得记录集
_variant_tvName,vAge,vDept,vSex;
while(!
m_pRecordset->adoEOF)///这里为什么是adoEOF而不是EOF呢?
还记得rename("EOF","adoEOF")这一句吗?
{
vName=m_pRecordset->GetCollect(_variant_t((long)1));///取得第1列的值,从0开始计数,你也可以直接给出列的名称,如下一行
vAge=m_pRecordset->GetCollect("sage");///取得username字段的值
vDept=m_pRecordset->GetCollect("sdept");
vSex=m_pRecordset->GetCollect("ssex");
///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
if(vName.vt!
=VT_NULL&&vAge.vt!
=VT_NULL&&vDept.vt!
=VT_NULL&&vSex.vt!
=VT_NULL)
TRACE("姓名:
%s,性别:
%s,年龄:
%d,所在系:
%s\r\n",
(LPCTSTR)(_bstr_t)vName,
(LPCTSTR)(_bstr_t)vSex,
vAge.lVal,
(LPCTSTR)(_bstr_t)vDept);
m_pRecordset->MoveNext();///移到下一条记录
}
m_pRecordset->Close();
(3)RecordSet对象
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open("SELECT*FROMstudent",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
_variant_tvName,vAge,vDept,vSex;
while(!
m_pRecordset->adoEOF)///这里为什么是adoEOF而不是EOF呢?
还记得rename("EOF","adoEOF")这一句吗?
{
vName=m_pRecordset->GetCollect(_variant_t((long)1));///取得第1列的值,从0开始计数,你也可以直接给出列的名称,如下一行
vAge=m_pRecordset->GetCollect("sage");///取得username字段的值
vDept=m_pRecordset->GetCollect("sdept");
vSex=m_pRecordset->GetCollect("ssex");
///在DEBUG方式下的OUTPUT窗口输出记录集中的记录
if(vName.vt!
=VT_NULL&&vAge.vt!
=VT_NULL&&vDept.vt!
=VT_NULL&&vSex.vt!
=VT_NULL)
TRACE("姓名:
%s,性别:
%s,年龄:
%d,所在系:
%s\r\n",
(LPCTSTR)(_bstr_t)vName,
(LPCTSTR)(_bstr_t)vSex,
vAge.lVal,
(LPCTSTR)(_bstr_t)vDept);
m_pRecordset->MoveNext();///移到下一条记录
}
///添加1条新记录并赋值
try{
m_pRecordset->AddNew();///添加新记录
m_pRecordset->PutCollect("sno",_variant_t("201400015"));
m_pRecordset->PutCollect("sname",_variant_t("李四4"));
m_pRecordset->PutCollect("ssex",_variant_t("男"));
m_pRecordset->PutCollect("sage",_variant_t((long)18));
m_pRecordset->PutCollect("sdept",_variant_t("CS"));
}
catch(_com_errore)///捕捉异常
{
CStringerrormessage;
errormessage.Format("AddNew!
\r\n错误信息:
%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
m_pRecordset->Move(1,_variant_t((long)adBookmarkFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处
m_pRecordset->PutCollect(_variant_t("sage"),_variant_t((long)46));///修改其年龄
m_pRecordset->Update();///保存到库中
//m_pRecordset->Close();
/*m_pRecordset->MoveLast();///移到首条记录
try{
m_pRecordset->Delete(adAffectCurrent);///删除当前记录
}
catch(_com_errore)///捕捉异常
{
CStringerrormessage;
errormessage.Format("删除!
\r\n错误信息:
%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}*/
按钮一语句
按钮二语句
按钮三语句
8.生成项目,并进行调试
调试成功,输出如图界面
三、实验心得
这次关于ADO连接数据库的上机操作,让我了解了在VC开发环境下如何使用ADO技术连接数据库,并实现对数据库的查询。
其实,在实验过程中我并没有很好地理解实验步骤的内涵,而是依照实验指导书,摸着石头过河。
不过,随着实验一步一步的进行,我开始认识到了数据库编程的美妙之处。
使用ADO编程,提高了应用系统与数据库平台的独立性,使得应用系统的开发与数据库平台的选择、数据库的设计等工作并行进行。
由于知识掌握不牢固,实验指导书内容不详细,我在实验中出现了很多自己解决不了的问题。
但最后通过请教老师,积极与同学进行探讨合作,完成了本次实验,受益匪浅。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告 ADO 连接