《数据库技术及应用》实验报告.docx
- 文档编号:5254697
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:41
- 大小:1.16MB
《数据库技术及应用》实验报告.docx
《《数据库技术及应用》实验报告.docx》由会员分享,可在线阅读,更多相关《《数据库技术及应用》实验报告.docx(41页珍藏版)》请在冰豆网上搜索。
《数据库技术及应用》实验报告
《数据库技术及应用》实验报告
题目:
实验3嵌入式SQL
姓名
日期
实验环境:
MicrosoftVisualC++6.0,MicrosoftSQLServer2005
实验内容与完成情况:
实验内容:
在VisualStudioC++环境中通过ODBC实现与实验1建立的数据库StuManagement的互联,进行实验要求的各种操作,关系模式和数据的操作均通过应用程序界面完成;
根据以下要求认真进行实验,记录所有的实验用例,填写实验报告。
1.数据库连接
1.1通过ODBC实现与实验1数据库互联;
2.关系模式操作
2.1创建1个基本表,并插入2行数据;
2.2修改及删除基本表;
3.数据操作:
数据查询操作(注:
对于实验1要求的查询种类,选择1种实现即可);
3.2数据修改操作;
3.3数据删除操作;
3.4界面执行SQL语句操作(注:
用户通过界面输入SQL语句,应用程序执行该语句,对数据库进行操作);
界面要求:
查询结果的多行显示(至少支持5行以上查询结果的显示);
界面美观,操作简单。
实验过程:
1.通过ODBC实现与实验1数据库互联;
在ODBC应用程序中,应用程序要访问一个数据库,首先必须用ODBC管理器注册一
个数据源,建立起ODBC与具体数据库的联系。
只有在建立了连接之后才可以进行对数据
源的操作,进而操作数据库。
下面是注册数据源的操作:
打开ODBC数据库管理器
在“ODBC数据源管理器”对话框中,单击“添加”按钮,弹出创建新数据源对话框,此处选择SQLSERVER为数据源驱动程序,如下图。
单击“完成”按钮后,弹出创建到SQLSERVER的新的数据源。
如下图。
成功建立数据源
以
2.创建单文档应用程序
1)启动VisualC++6.0,选择File|New,弹出New对话框,选择Projects标签,然后再列
表中选中选择MFCAppWizard[exe]选项,在“Projectname”文本框中输入工程文件名
(根据需要自己确定),在“Location”中指定应用文件创建的位置,如下图所示:
单击确定,选择单文档
点击数据源,按钮,弹出DatabaseOptions对话框如下图所示,在ODBC的下拉列
表中选择学生信息数据源。
单击OK,弹出SelectDatabaseTables对话框,如下图所示,选择自己要链接的表S。
单击OK,单击Next按钮,这一步中选择文档类型为容器类型,如下图所示。
单击Next,之后都是默认,单击Finish完成。
到此初步的工程已经建好,下面进行界
面的设计。
3.新建界面按钮
在项目工作窗口中选择ResourceView页面,双击Menu中的IDD_LIANXI2_FORM,
弹出文档模板和控件工具栏,构建界面如下图:
将学生信息系统部分的Editbox的ID分别改为IDC_ID_EDIT、IDC_NAME_EDIT、IDC_AGE_EDIT、IDC_DEPT_EDIT、IDC_CHECKNAME。
将按钮改为ID改为IDC_ADD、IDC_MODI、IDC_DEL、IDC_CHECK
4.添加新类CRecordsetAdd:
在工具栏上选择Insert|NewClass,添加一个新类CRecordset
Add,如下图所示:
单击OK,弹出DatabaseOptions对话框,如图所示,同样的选择数据源“学生信息”后,单击OK按钮,弹出SelectDatabaseTables对话框,选择表S,单击OK
5.数据的显示
在CRecordsetAdd中添加四个成员变量如下所示:
CStringm_Sno;
CStringm_Sname;
CStringm_Sage;
CStringm_Sdept;
同时其成员函数DoFieldExchange如下:
voidCRecordsetAdd:
:
DoFieldExchange(CFieldExchange*pFX)
{
//{{AFX_FIELD_MAP(CRecordsetAdd)
pFX->SetFieldType(CFieldExchange:
:
outputColumn);
RFX_Text(pFX,_T("[Sno]"),m_Sno);
RFX_Text(pFX,_T("[Sname]"),m_Sname);
RFX_Int(pFX,_T("[Sage]"),m_Sage);
RFX_Text(pFX,_T("[Sdept]"),m_Sdept);
//}}AFX_FIELD_MAP
}
即采用了RFX机制实现了数据的交换。
在CLianxi2View:
:
DoDataExchange()函数中添加代码如下所示:
voidCLianxi2View:
:
DoDataExchange(CDataExchange*pDX)
{
CRecordView:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLianxi2View)
DDX_Text(pDX,IDC_EDID_QUERY,m_strQuery);
DDX_Text(pDX,IDC_SQL_EDIT,m_sql);
DDX_FieldText(pDX,IDC_EDIT1,m_pSet->m_Sno,m_pSet);
DDX_FieldText(pDX,IDC_EDIT2,m_pSet->m_Sname,m_pSet);
DDX_FieldText(pDX,IDC_EDIT4,m_pSet->m_Sdept,m_pSet);
DDX_FieldText(pDX,IDC_EDIT3,m_pSet->m_Sage,m_pSet);
//}}AFX_DATA_MAP
}
这样就实现了数据的显示问题。
点击界面上的红色圆圈里的翻页按钮,可以逐个查看记录或查看第一页、最后页的记录:
。
6.“添加”的实现:
为了添加记录,添加一个对话框资源:
在项目工作去窗口中选择ResourceView页面,右键单击Dialog选择插入Dialog,则添加了一个对话框,为其添加四个Editbox,其ID分别为IDC_ID、IDC_NAME、IDC_AGE、IDC_DEPT。
同时按照前面所描述的方法为该对话框添加类CAddNew,如下图所示:
单击View|MFCClassWizard,在Project中选择lianxi2,在Classname中选择CAddNew,
则在下面的界面中显示对话框中的界面,选中IDC_AGE,单击AddVariable,弹出如图的
对话框,添加变量的名称,选择其类型。
7.实现添加功能的函数
在主对话框中,即在ResourceView页面中,双击IDD_LIANXI2_FORM,出现已经设
计好的主对话框后,双击添加按钮,出现对话框如下:
单击OK,为其添加函数如下所示:
voidCLianxi2View:
:
OnAdd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
CAddNewdlg;
CStringstr;
CStringstr1;
CDatabasedb;
if(IDOK==dlg.DoModal())
{
try
{
str1.Format("INSERTINTOS(Sno,Sname,Sage,Sdept)values('%s','%s','%s','%s')",dlg.m_id,dlg.m_name,dlg.m_age,dlg.m_dept);
db.Open("学生信息");
db.ExecuteSQL(str1);
}
catch(CDBException*e)
{
AfxMessageBox(e->m_strError);
return;
}
str.Format("添加[%s]成功!
",dlg.m_name);
MessageBox(str,NULL,MB_OK|MB_ICONINFORMATION);
m_pSet->m_Sno=dlg.m_id;
m_pSet->m_Sname=dlg.m_name;
m_pSet->m_Sage=dlg.m_age;
m_pSet->m_Sdept=dlg.m_dept;
UpdateData(FALSE);
}
}
执行结果:
点击添加按钮,弹出对话框,填写信息如下:
点击确定按钮,
被添加的记录在界面上成功显示
8.实现删除功能的函数
voidCLianxi2View:
:
OnDel()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
//CAddNewdlg;
CDatabasedb;
try
{
CStringstr;
CRecordsetAddm_pdatabase;
if(m_pdatabase.IsOpen())
{
m_pdatabase.Close();
}
str.Format("删除记录[%s]成功!
",m_pSet->m_Sname);
m_pdatabase.Open(CRecordset:
:
snapshot,NULL,CRecordset:
:
none);
CRecordsetStatusstatus;/////cl
m_pSet->GetStatus(status);//////cl
m_pdatabase.Delete();
if(!
m_pdatabase.IsEOF())
{
m_pdatabase.MoveLast();
}
else
{
m_pdatabase.SetFieldNull(NULL);
}
if(m_pdatabase.IsOpen())
{
m_pdatabase.Close();
}
m_pSet->Requery();
UpdateData(FALSE);
MessageBox(str,NULL,MB_OK|MB_ICONINFORMATION);
}
catch(CDBException*e)
{
AfxMessageBox(e->m_strError);
return;
}
}
执行结果如下:
删除成功,界面显示其他记录。
9.实现修改功能的函数
voidCLianxi2View:
:
OnModi()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
CAddNewdlg;
CStringstr;
CStringstr1;
CDatabasedb;
if(IDOK==dlg.DoModal())
{
try
{
str1.Format("UPDATESSETSname='%s',Sage='%s',Sdept='%s'WHERESno='%s'",dlg.m_name,dlg.m_age,dlg.m_dept,dlg.m_id);
db.Open("学生信息");
db.ExecuteSQL(str1);
}
catch(CDBException*e)
{
AfxMessageBox(e->m_strError);
return;
}
str.Format("修改[%s]成功!
",dlg.m_name);
MessageBox(str,NULL,MB_OK|MB_ICONINFORMATION);;
m_pSet->m_Sname=dlg.m_name;
m_pSet->m_Sage=dlg.m_age;
m_pSet->m_Sdept=dlg.m_dept;
UpdateData(FALSE);
}
}
执行结果如下:
修改前
点击修改按钮,弹出对话框,填写信息
修改结果:
10.为查询添加函数
voidCLianxi2View:
:
OnCheck()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
CDatabasedb;
db.Open("学生信息");
CStringstr;
m_checkname.TrimLeft();
if(m_checkname.IsEmpty())
{
MessageBox("要查询的学号不能为空!
");
return;
}
CRecordsetrecset(&db);
CStringstrSQL;
strSQL.Format("SELECT*FROMSWHERESno='%s'",m_checkname);//执行的SQL语句
//打开查询结果集
recset.Open(CRecordset:
:
forwardOnly,strSQL,CRecordset:
:
readOnly);
if(recset.IsEOF())//查询结果集为空
{
MessageBox("没有查到你要找的学生记录!
");
}
else
{
MessageBox("查询成功!
");
CStringtemp1,temp2,temp4;
CStringtemp3;
recset.GetFieldValue("Sno",temp1);
recset.GetFieldValue("Sname",temp2);
recset.GetFieldValue("Sage",temp3);
recset.GetFieldValue("Sdept",temp4);
//(int)(LPCTSTR)
m_pSet->m_Sno=temp1;
m_pSet->m_Sname=temp2;
m_pSet->m_Sage=temp3;
m_pSet->m_Sdept=temp4;
}
if(!
m_pSet->IsEOF())
{
UpdateData(FALSE);
}
recset.Close();
}
执行结果如下:
输入查询信息:
点击主键查询后:
11.数据库记录显示
在MainFrm.cpp中,将indicators数组修改成如下代码:
staticUINTindicators[]=
{
ID_SEPARATOR,
ID_SEPARATOR,//statuslineindicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
在MainFrm.h中,将m_wndStatusBar改为public:
public:
//controlbarembeddedmembers
CStatusBarm_wndStatusBar;
CToolBarm_wndToolBar;
在“建立类向导”中,选中OnCommand,点击AddFunction如下图:
在该函数中添加代码:
BOOLCLianxi2View:
:
OnCommand(WPARAMwParam,LPARAMlParam)
{
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
CStringstr;
CMainFrame*pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CStatusBar*pStatus=&pFrame->m_wndStatusBar;
if(pStatus)
{
CRecordsetStatusrStatus;
m_pSet->GetStatus(rStatus);
str.Format("当前记录:
%d/总记录:
%d",1+rStatus.m_lCurrentRecord,m_pSet->GetRecordCount());
pStatus->SetPaneText(1,str);
}
returnCRecordView:
:
OnCommand(wParam,lParam);
}
执行结果如图红色部分:
12.新建表。
添加按钮”新建表”,ID改为IDC_CreateTalbebutton1,函数如下:
voidCLianxi2View:
:
OnCreateTalbebutton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CDatabasedb;
//if(!
SQLConfigDataSource(NULL,ODBC_ADD_DSN,"SQLServer","DSN=学生信息"));
try
{
db.Open("学生信息");
db.ExecuteSQL("CREATETABLETEACHERS(TeacherIDCHAR(4)"",TeacherNameCHAR(10)"",CourseCHAR(10))");
}
catch(CDBException*e)
{
AfxMessageBox(e->m_strError);
return;
}
MessageBox("新建表成功!
");
}
执行结果如下:
点击按钮前,数据库中的表如下图:
点击新建表按钮:
打开数据库进行查看:
13.删除表
添加按钮“删除表”,ID改为IDC_DelNewtalbeButton。
函数代码如下:
voidCLianxi2View:
:
OnDelNewtalbeButton()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CDatabasedb;
try
{
db.Open("学生信息");
db.ExecuteSQL("DROPTABLETEACHERS");
m_xiugaiflag=0;
}
catch(CDBException*e)
{
AfxMessageBox(e->m_strError);
return;
}
MessageBox("删除表成功!
");
}
执行结果如下:
数据库中已没有TEACHERS表
14.添加数据
添加了一个对话框,为其添加三个Editbox,其ID分别为IDC_TeacherID、IDC_TeacherName、IDC_Course。
在类向导里为其添加cstring类型的变量m_teacherid,m_teachername,m_Course.为其建立类CSHUJUNew,该类继承自类Cdialog。
再添加一个对话框,为其添加四个Editbox,其ID分别为IDC_TeacherID、IDC_TeacherName、IDC_Course、IDC_TeacherAge。
在类向导里为其添加cstring类型的变量m_teacherid,m_teachername,m_Course,m_teacherage.为其建立类CSHUJUNew2,该类继承自类Cdialog。
设置一个xiugaiflag标志,当表被修改时,xiugaiflag标志置为1。
否则,置为0。
当xiugaiflag==0时调用教师信息表1,xiugaiflag==1时调用教师信息表2
添加按钮“添加数据”,ID改为IDC_AddNewtableButton。
函数代码如下:
voidCLianxi2View:
:
OnAddNewtableButton()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CSHUJUNewdlg;
CSHUJUNew2dlg2;
CStringstr;
CStringstr1;
CDatabasedb;
if(m_xiugaiflag==0)
{if(IDOK==dlg.DoModal())
{
try
{
db.Open("学生信息");
str1.Format("INSERTINTOTEACHERS(TeacherID,TeacherName,Course)VALUES('%s','%s','%s')",dlg.m_teacherid,dlg.m_teachername,dlg.m_Course);
db.ExecuteSQL(str1);
}
catch(CDBException*e)
{
e->ReportError();
return;
}
MessageBox("添加数据成功!
");
}
}
elseif(m_xiugaiflag==1)
{
if(IDOK==dlg2.DoModal())
{
try
{
db.Open("学生信息");
str1.Format("INSERTINTOTEACHERS(TeacherID,TeacherName,Course,TeacherAge)VALUES('%s','%s','%s','%s')",dlg2.m_teacherid,dlg2.m_teachername,dlg2.m_Course,dlg2.m_teacherage);
db.ExecuteSQL(str1);
}
catch(CDBException*e)
{
e->ReportError();
return;
}
MessageBox("添加数据成功!
");
}
}
}
执行结果如下:
点击添加数据按钮,填写教师信息表
点击确定,查看数据库
点击修改表后,再点击添加数据按钮,
查看数据库
15.修改表
添加按钮“修改表”,ID修改为IDC_ModButton,
设置一个xiugaiflag标志,当表被修改时,xiugaiflag标志置为1。
否则,置为0
函数代码如下:
voidCLianxi2View:
:
OnModButton()
{
//TODO:
Addyourcontrol
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库技术及应用 数据库技术 应用 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)