数据库实验报告ADO连接数据库_第1页
数据库实验报告ADO连接数据库_第2页
数据库实验报告ADO连接数据库_第3页
数据库实验报告ADO连接数据库_第4页
数据库实验报告ADO连接数据库_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验名称ADO连接数据库学院信息科学与工程学院专业班级通信班姓名学号《数据库系统概论》实验报告题目:ADO连接数据库姓名日期2014年6月10日实验平台:VisualStudio2008开发环境;数据库为微软SQLServer2000实验目的:在VC开发环境下使用ADO技术连接数据库分别使用Connection、Command和Recordset对象实现对数据库的查询实验内容和要求通过VS的应用程序向导创建一个对话框应用程序,使用ADO连接数据库。在对话框上放置三个按钮,分别为使用Connection、Command和Recordset对象实现对数据库的查询。实现每个对话框的事件处理函数,在每个函数中分别通过Connection、Command和Recordset对象实现对数据库的查询。实验步骤以管理员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'--ALTERTABLEcourseADDCONSTRAINTcourse_ibfk_1FOREIGNKEY(Cpno)REFERENCEScourse(Cno);----限制表'sc'--ALTERTABLEscADDCONSTRAINTsc_ibfk_1FOREIGNKEY(Sno)REFERENCESstudent(Sno);ALTERTABLEscADDCONSTRAINTsc_ibfk_2FOREIGNKEY(Cno)REFERENCEScourse(Cno);以管理员sa登录数据库新建scdb数据库创建表在应用程序App类的InitInstance()函数中添加如下语句,初始化COM库AfxOleInit();

新建项目AdoTry完成MFC应用程序添加语句AfxOleInit()在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类库在应用程序的Dlg类的定义中增加三个成员变量: _ConnectionPtrm_pConnection; _RecordsetPtrm_pRecordset; _CommandPtrm_pCommand;增加成员变量在应用程序的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);在对话框上添加三个按钮,设置按钮上的标题分别为:“使用Connection对象访问数据库”、“使用Command对象访问数据库”和“使用RecordSet对象访问数据库”。添加三个按钮重命名按钮分别双击三个按钮,进入到每个按钮的事件处理函数中,添加如下语句,测试与数据库的查询。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);///显示当前记录条数 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();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,_vari

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论