项目10学生成绩数据库系统的开发课件_第1页
项目10学生成绩数据库系统的开发课件_第2页
项目10学生成绩数据库系统的开发课件_第3页
项目10学生成绩数据库系统的开发课件_第4页
项目10学生成绩数据库系统的开发课件_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

项目10学生成绩数据库系统的开发数据库应用系统是在数据库管理系统的支持下运行的计算机应用软件。前已述及,开发数据库应用系统不仅要进行数据库的设计,而且还要进行应用程序的设计,这也是前面项目7中提到的系统实施阶段的主要任务。为了使读者对在不同的开发环境下进行数据库应用系统编程有个较为全面的认识,本项目选择了VisualC++、JSP和ASP.NET三种不同的开发环境来介绍数据库应用程序的开发方法。新课导入

:任务描述:按照开发的基本过程和内容,将项目分解成以下几个任务:任务10.1确定学生成绩管理系统的体系结构及其前台开发工具任务10.2确定系统的数据库访问技术(包括连接技术和数据库访问对象)任务10.3使用VisualC++开发学生成绩管理系统任务10.4使用JSP开发学生成绩管理系统任务10.5使用ASP.NET开发学生成绩管理系统教学目标:

知识目标:(1)掌握3种不同的数据库系统体系结构及其适用场合;了解常用的数据库连接技术,以及ODBC、JDBC和OLEDB三种接口的技术要点;(2)掌握数据库访问对象ADO和ADO.NET的结构及其主要对象;(3)了解常用的应用程序开发工具VisualC++、JSP及ASP.NET的编程特点及其主要的编程技术。技能目标:(1)会使用常用的数据库连接技术,能进行ODBC、JDBC和OLEDB三种接口的使用;(2)能够使用数据库访问对象ADO和ADO.NET进行SQLServer数据操作。

应用程序设计的一个关键要素是系统的体系结构,体系结构决定了应用程序的各个部分如何进行交互,同时也决定了每个部分实现的功能。随着信息系统的大型化、复杂化、分布式的发展趋势和变化特点,其体系结构也发生了很大的变化,从以往基于局域网的客户/服务器(Client/Server,简称C/S)结构到已广泛使用的基于Web的浏览器/服务器(Browser/Server,简称B/S)结构,再到目前正得到迅速应用的基于.NET技术的分布式计算框架。1.C/S结构2.B/S结构3..NET框架结构知识点1:目前常用的数据库应用系统体系结构

C/S结构

数据库服务器客户机客户机计算机网络图10-1C/S结构模型B/S结构

Web服务器数据库服务器浏览器浏览器计算机网络图10-2B/S结构模型.NET框架结构

用户应用表示层数据库平台通用语言运行时(CLR)通信协议(XML、SOAP、UDDI等开放标准)Web服务器浏览器组件库WinForms图10-3基于.NET的应用程序架构任务1:确定学生成绩管理系统的体系结构【任务描述】试根据项目7所描述的应用需求确定学生成绩管理系统的体系结构,并选择合适的前台开发工具。【任务实现】根据项目7所描述的应用需求,现要建立一个基于校园网络应用平台的、面向学校教务部门以及各系部教学管理科室等层次用户的学生成绩管理系统,所以本系统应在学校校园网的基础上建立。为了使读者能体会到不同系统体系结构的差别,这里假设有两种不同结构的校园网,一种为仅能在学校内部使用的局域网,用户需在客户机上访问学生成绩管理系统;另一种为与外界连通的Internet网络,用户只需在客户机上安装一个通用的浏览器软件即可访问校园网。这样,前者情况下学生成绩管理系统可以选择C/S体系结构,后者情况下则可以使用B/S体系结构或.NET框架结构。另外,在系统开发工具的选择上,C/S架构使用VisualC++前台开发环境;B/S架构使用JSP脚本环境进行开发;而.NET框架结构则使用ASP.NET开发环境。它们的后台数据库均建立在SQL-Server2000之上。在实际开发中,为了使应用程序能够操作数据库中的数据,必须建立一个与数据库管理系统的访问机制,以实现应用程序和数据库之间的互相通信。目前实现这种通信的方式主要有两种:数据库API(ApplicationProgramInterface,称为“应用程序接口”)和数据访问对象接口。数据库API(数据库连接技术):1.ODBC2.OLEDB3.JDBC知识点2:数据库访问技术1、ODBC

ODBC是开放式数据库连接(OpenDatabaseConnectivity)的英文缩写。它是微软公司为了便于用户在Windows系统下开发应用系统而制定的一种开放式的、标准化的应用程序接口。

2、OLEDBOLEDB建立在Microsoft的COM(组件对象模型,其商业概念的称谓为ActiveX)基础上,它包括一组COM组件程序,组件与组件之间或者组件与客户程序之间通过标准的COM接口进行通讯,COM接口封装了各种数据系统的访问操作,为数据使用者(即应用程序)和数据提供者建立了标准。OLEDB模型主要包括以下一些COM接口对象:(1)数据源(DataSource)对象(2)会话(Session)对象(3)命令(Command)对象(4)行集(RowSet)对象3、JDBCJDBCAPI提供两种主要接口:一是面向开发人员的java.sql程序包,使得java程序员能够进行数据库连接,执行SQL查询,并得到结果集,java.sql程序包提供了6个类和18个接口;二是面向底层数据库厂商的JDBCDrivers,它提供了4种类型的数据库驱动方式:JDBC-ODBCBridge、JDBC-NativeAPIBridge、JDBC-middleware和PureJDBCDriver。ADO的数据存取结构

ODBC应用程序接口OLEDBADO非SQLDATASQLDATA图10-4在Web环境下ADO的数据存取结构ADO中的对象和集合

Connection对象

Command对象

Recordset对象

Parameters对象及Parameters集合

Fields对象及Fields集合

Property对象及Property集合

Errors对象及Errors集合

ADO.NETDataSet组件

DataSet包含一个或多个DataTable对象的集合,这些对象由行、列、主键、外键、约束及其数据的关系信息组成,由此你可以把DataSet想象成内存中的数据库,不管数据来源于一个关系型的数据库,还是来源于一个XML文档,都可以用一个统一的编程模型来创建和使用它,从而提高了程序的交互性和可扩展性,尤其适合于分布式的应用场合。.NET数据提供程序

Connection对象提供与数据源的连接。Command对象使用户能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader对象从数据源中提供高性能的数据流。DataAdapter对象用于从数据源中检索数据,并填充DataSet中的表,并且会将对DataSet作出的更改返回数据源,从而起到连接DataSet对象和数据源的桥梁作用。.NET数据提供程序Connection事务Command参数DataReaderDataAdapterSelectCommandInsertCommandUpdateCommandDeleteCommandDataSetDataTableCollectionDataTableDataRowCollectionDataColumnCollectionDataRowCollectionDataColumnCollectionXML数据库图10-5ADO.NET的数据存取结构任务2:确定系统的数据库访问技术【任务描述】试根据开发学生成绩管理系统不同的体系结构及其采用的前台软件开发工具,确定系统的数据库访问技术。【任务实现】在本任务中用户可根据不同的系统体系结构和前台软件开发工具,选择合适的数据对象接口或API应用程序接口访问SQLServer数据库。针对任务10.1所采用的3种系统体系结构及其开发工具可作如下选择:当采用VisualC++进行C/S结构的系统开发时,可利用ODBC、OLEDB连接技术或ADO数据访问对象来访问SQLServer数据库;当采用JSP进行B/S结构的系统开发时,则利用JDBC连接技术;当采用ASP.NET进行.NET结构的系统开发时,则采用OLEDB、ADO.NET作为数据库的连接和访问技术。1、VisualC++6.0的编程特点2、VisualC++的应用程序开发界面3、VisualC++中的应用程序窗口4、VisualC++中的资源5、事件驱动代码6、Microsoft基本类库(MFC)7、VisualC++应用程序的开发步骤知识点3:VisualC++编程知识VisualC++6.0访问数据库的技术(1)ODBC(OpenDataBaseConnectivity(2)MFCODBC(MicrosoftFoundationClassODBC(3)ADO(ActiveXDataObject)2.在VisualC++6.0中利用MFCODBC与数据库连接(1)在应用程序中连接数据源(2)在应用程序中断开与数据源的连接3.在VisualC++6.0中操作记录集知识点4:在VisualC++中访问SQLServer(1)纪录集的概念(2)记录集的打开(3)记录集的更新(4)记录集的滚动(5)记录集的定位(6)记录集的排序(7)记录集的事务处理(8)记录集的关闭1.配置ODBC数据源【任务描述】为数据库“StudentScore”建立一个名为“Score_ODBC”的系统DSN。【任务实现】(1)在Windows2003的控制面板中,双击“管理工具”中的“数据源(ODBC)”图标,打开“ODBC数据源管理器”对话框,在其中选择“系统DSN”选项卡,如图10-17所示。(2)在“系统DSN”选项卡中,单击“添加”按钮,打开如图10-18所示的“创建新数据源”对话框,在该对话框中选择新建数据源要用的驱动程序SQLServer,单击“完成”按钮。(3)在打开的如图10-19所示的“创建数据源向导”对话框中,输入数据源名、说明信息和连接的SQLServer数据库服务器,单击“下一步”按钮。任务3:使用VisualC++开发学生成绩管理系统2.学生成绩管理系统中的“登录”功能模块的设计【任务描述】使用VisualC++6.0开发学生成绩管理系统中的“登录”功能模块,要求实现不同级别的用户能根据各自的用户名和口令进入系统,其界面如图10-24所示。图10-24学生成绩管理系统“登陆”功能界面(1)主窗体设计,其主要属性如表10-1所示。属性设置值IDIDD_DIALOG_LOGINCaption用户登录(2)添加框架控件和其中的文本框控件、组合框控件、标签控件等,各控件属性的设置如表10-2所示。

元素名属性设置值组框IDIDC_STATICCaption用户登录静态文本(共2个)IDIDC_STATICCaption用户名、密码编辑框(共2个)IDIDC_EDIT_USER、IDC_EDIT_PASS按钮(共2个)IDIDOK、IDCANCELCaption登录、退出(3)编写事件过程程序代码。voidCLoginDlg::OnOK(){//TODO:AddextravalidationhereBOOLbLogin=false;CStringstrUser,strPass;GetDlgItem(IDC_EDIT_USER)->GetWindowText(strUser);GetDlgItem(IDC_EDIT_PASS)->GetWindowText(strPass);if(OpenDB()){//执行SELECT语句 CRecordsetrsUser(&m_db); rsUser.Open(CRecordset::forwardOnly,"selectUsers_Name,PasswordfromUsers"); CStringstrResult; while(!rsUser.IsEOF()){rsUser.GetFieldValue("Users_Name",strResult); if(strResult==strUser){rsUser.GetFieldValue("Password",strResult); if(strResult=strPass) bLogin=true; } rsUser.MoveNext(); } if(!bLogin){this->MessageBox("用户名或者密码不正确","错误",MB_OK+MB_ICONERROR); return; } CloseDB(); } else{ AfxMessageBox("无法打开数据库"); } CDialog::OnOK();}3.学生成绩管理系统中的“学生基本信息管理”功能的设计【任务描述】使用VisualC++6.0开发学生成绩管理系统中的“学生基本信息管理”功能模块,要求实现学生基本信息的显示、添加、修改和删除4个功能,其界面如图10-26所示。

图10-26“课程信息录入与维护”功能界面表10-3主窗体的主要属性(1)主窗体设计,其主要属性如表10-3所示。属性设置值IDIDD_DIALOG_STUDENT_INFOCaption学生基本信息维护(2)添加组框、静态文本、编辑框、按钮等元素,各元素属性的设置如表10-4所示。

表10-4Adodc1控件的主要属性元素名属性设置值MFCgridctrlIDIDC_GRIDCTRLCaptionCustom1按钮(共4个)IDIDC_BTN_INSERT、IDC_BTN_DELETE、IDC_BTN_MODIFY、IDCANCELCaption添加、删除、登录、退出(3)编写事件过程程序代码。初始化:voidCStudentInfoDlg::RefreshDB(){if(OpenDB()){ CRecordsetrs(&m_db); rs.Open(CRecordset::forwardOnly,"Select*frombStudent"); introw_all=0; while(!rs.IsEOF()){ row_all++; rs.MoveNext(); } rs.Close();//清空Grid m_GridCtrl.DeleteAllItems(); m_GridCtrl.SetEditable(false);//设置Grid的属性 m_GridCtrl.SetRowCount(row_all+1); m_GridCtrl.SetColumnCount(5); m_GridCtrl.SetFixedRowCount(1); m_GridCtrl.SetFixedColumnCount(1); m_GridCtrl.SetRowResize(FALSE);//加标题行row=0 introw=0; GV_ITEMItem;

Item.row=row; Item.mask=GVIF_TEXT|GVIF_FORMAT; Item.nFormat=DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; Item.col=0; Item.szText.Format("序号"); m_GridCtrl.SetItem(&Item); Item.col=1; Item.szText.Format("学号"); m_GridCtrl.SetItem(&Item); Item.col=2; Item.szText.Format("姓名"); m_GridCtrl.SetItem(&Item); Item.col=3; Item.szText.Format("性别"); m_GridCtrl.SetItem(&Item); Item.col=4; Item.szText.Format("出生日期"); m_GridCtrl.SetItem(&Item); Item.col=5; Item.szText.Format("班级"); m_GridCtrl.SetItem(&Item); if(row_all>0){ rs.Open(CRecordset::forwardOnly,"Select*frombStudent");//加内容 while(!rs.IsEOF()){ row++;//获取字段值 CStringstr_Stud_Name,str_Stud_Id,str_Stud_Sex,str_Birth,str_Class_Id; rs.GetFieldValue("Stud_Id",str_Stud_Id); rs.GetFieldValue("Stud_Name",str_Stud_Name); rs.GetFieldValue("Stud_Sex",str_Stud_Sex); rs.GetFieldValue("Birth",str_Birth); rs.GetFieldValue("Class_Id",str_Class_Id); //把当前记录加入到Grid中 GV_ITEMItem; Item.row=row; Item.mask=GVIF_TEXT|GVIF_FORMAT; Item.nFormat=DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;

//所在班级 Item.col=5; Item.szText.Format(str_Class_Id); m_GridCtrl.SetItem(&Item); rs.MoveNext(); } rs.Close(); } m_GridCtrl.AutoSize(); } else{ AfxMessageBox("打开数据库错误!"); } CloseDB();}添加功能:voidCStudentInfoDlg::OnBtnInsert(){m_dlgDetail->SetWindowText("添加学生信息"); m_dlgDetail->ReadyToInsert(); m_dlgDetail->ShowWindow(SW_SHOW);}删除功能:voidCStudentInfoDlg::OnBtnDelete(){introw=m_GridCtrl.GetSelectedCellRange().GetMinRow();CStringsID=m_GridCtrl.GetItemText(row,1);CStringsName=m_GridCtrl.GetItemText(row,2);if(IDYES=MessageBox("确实要删除"+sID+""+sName+"吗?","删除确认",MB_YESNO)){ if(OpenDB()){ CStringsql="DeletefrombStudentwhereStud_Id='"+sID+"'"; m_db.ExecuteSQL(sql); } CloseDB(); } RefreshDB();}修改功能:voidCStudentInfoDlg::OnBtnModify(){m_dlgDetail->SetWindowText("修改学生信息");introw=m_GridCtrl.GetSelectedCellRange().GetMinRow();CStringsID=m_GridCtrl.GetItemText(row,1);if(sID.IsEmpty()){ AfxMessageBox("请选择需要修改的记录!"); return;}m_dlgDetail->ReadyToModify(sID);m_dlgDetail->ShowWindow(SW_SHOW);RefreshDB();}4.学生成绩管理系统中的“课程信息管理”功能的设计【任务描述】使用VisualC++6.0开发学生成绩管理系统中的“课程基本信息管理”功能模块,要求实现课程基本信息的显示、添加、修改和删除4个功能,其界面如图10-29所示。

图10-29“课程信息录入与维护”功能界面表10-7主窗体的主要属性(1)主窗体设计,其主要属性如表10-7所示。属性设置值IDIDD_DIALOG_COURSE_INFOCaption课程信息维护(2)添加组框、静态文本、编辑框、按钮等元素,各元素属性的设置如表10-8所示。

表10-8各元素的属性设置

元素名属性设置值MFCgridctrlIDIDC_GRIDCTRL2CaptionCustom1编辑框(共5个)IDIDC_EDT_STU_ID、IDC_EDIT_CID、IDC_EDIT_CNAME、IDC_EDIT_CTYPE、IDC_EDIT_CHOUR按钮(共2个)IDIDC_BTN_INSERT2、IDC_BTN_DELETE2、IDC_BTN_MODIFY2、IDCANCELCaption添加、删除、登录、退出(3)编写事件过程程序代码。初始化:voidCCourseInfoDlg::RefreshDB(){if(OpenDB()){CRecordsetrs(&m_db); rs.Open(CRecordset::forwardOnly,"Select*frombCourse"); introw_all=0; while(!rs.IsEOF()){ row_all++; rs.MoveNext();} rs.Close(); //清空Grid m_GridCtrl.DeleteAllItems(); m_GridCtrl.SetEditable(false); //设置Grid的属性 m_GridCtrl.SetRowCount(row_all+1); m_GridCtrl.SetColumnCount(5); m_GridCtrl.SetFixedRowCount(1);

m_GridCtrl.SetFixedColumnCount(1); m_GridCtrl.SetRowResize(FALSE); //加标题行row=0 introw=0; GV_ITEMItem; Item.row=row; Item.mask=GVIF_TEXT|GVIF_FORMAT; Item.nFormat=DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS; Item.col=0; Item.szText.Format("序号"); m_GridCtrl.SetItem(&Item); Item.col=1; Item.szText.Format("课程代码");m_GridCtrl.SetItem(&Item); Item.col=2; Item.szText.Format("课程名称"); m_GridCtrl.SetItem(&Item); Item.col=3; Item.szText.Format("课程类别"); m_GridCtrl.SetItem(&Item); Item.col=4; Item.szText.Format("课程学时"); m_GridCtrl.SetItem(&Item);

if(row_all>0){ rs.Open(CRecordset::forwardOnly,"Select*frombCourse"); //加内容 while(!rs.IsEOF()){ row++; //获取字段值 CStringstr_Course_Id,str_Course_Name,str_Course_Type,str_Hours; rs.GetFieldValue("Course_Id",str_Course_Id); rs.GetFieldValue("Course_Name",str_Course_Name); rs.GetFieldValue("Course_Type",str_Course_Type); rs.GetFieldValue("Hours",str_Hours); //把当前记录加入到Grid中 GV_ITEMItem; Item.row=row; Item.mask=GVIF_TEXT|GVIF_FORMAT; Item.nFormat=DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;删除功能:voidCCourseInfoDlg::OnBtnDelete2(){ introw=m_GridCtrl.GetSelectedCellRange().GetMinRow(); CStringsID=m_GridCtrl.GetItemText(row,1); CStringsName=m_GridCtrl.GetItemText(row,2);if(IDYES==MessageBox("确实要删除"+sID+""+sName+"吗?","删除确认",MB_YESNO)){ if(OpenDB()){ CStringsql="DeletefrombCoursewhereCourse_Id='"+sID+"'"; m_db.ExecuteSQL(sql); } CloseDB(); } RefreshDB(); }修改功能:voidCCourseInfoDlg::OnBtnModify2(){ CStringstr; GetDlgItem(IDC_BTN_MODIFY2)->GetWindowText(str); if(str=="修改"){ introw=m_GridCtrl.GetSelectedCellRange().GetMinRow(); GetDlgItem(IDC_BTN_MODIFY2)->SetWindowText("确定"); m_strCID=m_GridCtrl.GetItemText(row,1); GetDlgItem(IDC_EDIT_CID)->EnableWindow(true); GetDlgItem(IDC_EDIT_CID_OLD)->SetWindowText(m_strCID); m_strCName=m_GridCtrl.GetItemText(row,2); GetDlgItem(IDC_EDIT_CNAME)->EnableWindow(true); m_strCType=m_GridCtrl.GetItemText(row,3); GetDlgItem(IDC_EDIT_CTYPE)->EnableWindow(true); m_strHours=m_GridCtrl.GetItemText(row,4); GetDlgItem(IDC_EDIT_CHOUR)->EnableWindow(true); GetDlgItem(IDC_BTN_DELETE2)->EnableWindow(false); GetDlgItem(IDC_BTN_INSERT2)->EnableWindow(false); GetDlgItem(IDC_GRIDCTRL2)->EnableWindow(false); UpdateData(FALSE); }elseif(str=="确定"){ if(OpenDB()){ CStringstrCID_old; GetDlgItem(IDC_EDIT_CID_OLD)->GetWindowText(strCID_old); CStringsql="DeletefrombCoursewhereCourse_Id='"+strCID_old+"'"; m_db.ExecuteSQL(sql); UpdateData(); sql="insertintobCourse(Course_Id,Course_Name,Course_Type,Hours)values('";sql+=m_strCID+"','";sql+=m_strCName+"','"; sql+=m_strCType+"',";sql+=m_strHours+")"; m_db.ExecuteSQL(sql); } else{ AfxMessageBox("打开数据库错误!"); } CloseDB(); RefreshDB(); GetDlgItem(IDC_BTN_MODIFY2)->SetWindowText("修改"); GetDlgItem(IDC_EDIT_CID)->SetWindowText(""); GetDlgItem(IDC_EDIT_CID)->EnableWindow(false); GetDlgItem(IDC_EDIT_CNAME)->SetWindowText(""); GetDlgItem(IDC_EDIT_CNAME)->EnableWindow(false); GetDlgItem(IDC_EDIT_CTYPE)->SetWindowText(""); GetDlgItem(IDC_EDIT_CTYPE)->EnableWindow(false); GetDlgItem(IDC_EDIT_CHOUR)->SetWindowText(""); GetDlgItem(IDC_EDIT_CHOUR)->EnableWindow(false); GetDlgItem(IDC_BTN_DELETE2)->EnableWindow(true); GetDlgItem(IDC_BTN_INSERT2)->EnableWindow(true); GetDlgItem(IDC_GRIDCTRL2)->EnableWindow(true); }}

返回结果发出请求JSP程序(.jsp)Servlet(.java)Java字节码(.class)HTML(.htm)客户端JSP是一种动态网页技术标准,在传统的网页HTML文件(*.htm、*.html)中加入Java程序片段和JSP标记(tag),就构成了JSP网页(*.jsp)。其中,程序片段可以操作数据库、重新定向网页等,它们构成了建立动态网页所需要的功能。其具体的工作原理如图10-31所示。由上述JSP的工作原理可知,运行*.jsp文件需要服务器端的支持,即提供脚本编程环境,而能够提供这种编程环境的Web服务器可以是SUN的Tomcat或WebLogic,也可以是Linux平台上的Web服务器—Apache。目前最常用的是Tomcat和WebLogic。知识点4:JSP程序设计知识点5:在JSP中访问SQLServer

1、JSP与数据库的连接(1)使用JDBC-ODBC桥(2)使用JDBC通过网络的纯Java驱动程序JSP与SQL结合操作数据库2、在JSP网页中执行SQL语句(1)执行查询数据的SQL语句ResultSet对象变量=Statement对象变量.executeQuery(SQL语句)(2)执行修改数据的SQL语句Statement对象变量.ExecuteUpdate(SQL语句)3、SQL数据集的处理下面列出了所创建的ResultSet类的方法:①booleanabsolute(introw)throwSQLException:移动记录指针到指定记录②voidbeforeFirst()throwSQLException:移动记录指针到第一条记录之前③voidafterLast()throwSQLException:移动记录指针到最后一条记录之后④booleanfirst()throwSQLException:移动记录指针到第一条记录⑤booleanlast()throwSQLException:移动记录指针到最后一条记录⑥booleannext()throwSQLException:移动记录指针到下一条记录⑦booleanprevious()throwSQLException:移动记录指针到上一条记录⑧voiddeleteRow()throwsSQLException:删除记录指针指向的记录⑨voidmoveToInsertRow()throwsSQLException:移动记录指针以增加一条记录⑩voidmoveToCurrentRow()throwsSQLException:移动记录指针到被记忆的记录4、JSP访问Web数据库的主要步骤①指定想要连接的数据库,注册(装载)一个驱动如:Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();②建立和数据库的连接如:Connectionconn=DriverManager.getConnection(url,"sa","888");其中url="jdbc:microsoft:sqlserver://localhost.1433;DatabaseName=StudentScore";③创建statement这个SQL语句的执行容器如:Statementstmt=conn.createStatement();④创建数据集对象ResultSet,进行数据操作如:ResultSetrs=stmt.executeQuery(“SELECTX,Y,ZFROMTablexyz”);⑤使用ResultSet对象所提供的方法和属性完成对SQL数据集的处理⑥断开与数据库的连接即用close()方法关闭数据集对象,关闭执行容器,断开与数据库的连接。任务4:使用JSP开发学生成绩管理系统【任务描述】使用JSP设计并实现学生成绩管理系统中的“学生成绩管理”功能模块,要求实现成绩列表显示、成绩信息添加、成绩信息修改和成绩信息删除4个功能。【任务实现】(1)在Tomcat安装目录的webapps目录下面新建一个文件夹,起名为“xscjgl”(2)设置站点

图10-37(a)“站点设置”对话框-本地信息图10-37(b)“站点设置”对话框-测试服务器(3)建立“学生成绩管理”网页

1)成绩列表显示页面的设计

①新建一动态网页。选择菜单【文件︱新建…】,在弹出的【新建文档】对话框中选择“动态页”和“JSP”,如图10-38所示。

图10-38“新建文档”对话框②选择菜单【文件︱保存】,将新建的动态网页保存为scoremanage.jsp,并设计网页上静态显示的内容③在页面中插入如下关键代码:importjava.sql.*

; Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=studentscore";Stringuser="sa";Stringpassword="123";Connectionconn=DriverManager.getConnection(url,user,password);Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("select*frombScore");while(rs.next()){ out.print("<tralign='center'>"); out.print("<tdwidth='70'height='34'>"+rs.getString(2)+"</td>"); out.print("<tdwidth='70'height='34'>"+rs.getString(3)+"</td>"); out.print("<tdwidth='60'height='34'>"+rs.getString(4)+"</td>"); out.print("<tdwidth='60'height='34'>"+rs.getString(5)+"</td>"); out.print("<tdwidth='60'height='34'>"+rs.getString(6)+"</td>"); out.print("<tdwidth='90'height='34'>"+rs.getString(7)+"</td>"); out.print("<tdwidth='50'height='34'><ahref='scoreupdate.jsp?id="+rs.getString(1)+"'target='main'>修改</a></td>"); out.print("<tdwidth='50'height='34'><ahref='scoredelete.jsp?id="+rs.getString(1)+"'>删除</a></td>");}rs.close();stmt.close();conn.close();2)成绩信息添加页面的设计①新建一动态网页,保存为scoreinsert.jsp,并设计网页上静态显示的内容,如图10-40所示。其中,表单设置名称为myform,动作为“dealscoreinsert.jsp”,方法为POST。图10-40设置好的“成绩信息添加页面”②再新建一动态网页,保存为dealscoreinsert.jsp,用于将学生成绩添加到StudentScore数据库的bScore表中。页面的关键代码为:importjava.sql.*

; Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=studentscore";Stringuser="sa";Stringpassword="123";Connectionconn=DriverManager.getConnection(url,user,password);Statementstmt=conn.createStatement();Stringsql="insertintobScore(Stud_Id,Course_Id,Term,Score,Credit,Makeup)values('"+stud_id+"','"+course_id+"','"+term+"','"+score+"','"+credit+"','"+makeup+"')";stmt.executeUpdate(sql);stmt.close(); conn.close();response.sendRedirect("scoremanage.jsp");3)成绩信息修改页面的设计①新建一动态网页,保存为scoreupdate.jsp,并设计网页上静态显示的内容,如图10-41所示。其中,表单设置名称为myform,动作为“dealscoreupdate.jsp”,方法为POST。

图10-41设置好的“成绩信息修改页面”②再新建一动态网页,保存为dealscoreupdate.jsp,用于将学生成绩添加到StudentScore数据库的bScore表中。页面的关键代码为:importjava.sql.*

;Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=studentscore";Stringuser="sa";Stringpassword="123";Connectionconn=DriverManager.getConnection(url,user,password);Statementstmt=conn.createStatement();Stringsql="updatebScoresetTerm='"+term+"',Score='"+score+"',Credit='"+credit+"',Makeup='"+makeup+"'whereStud_Cod='"+stud_cod+"'"; stmt.executeUpdate(sql);stmt.close(); conn.close(); response.sendRedirect("scoremanage.jsp");4)成绩信息删除页面的设计新建一动态网页,保存为scoredelete.jsp,用于删除学生成绩记录。页面的关键代码为:importjava.sql.*

;Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); Stringurl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=studentscore"; Stringuser="sa"; Stringpassword="123"; Connectionconn=DriverManager.getConnection(url,user,password); Statementstmt=conn.createStatement(); Stringsql="deletefrombScorewhereStud_Cod="+stud_cod; stmt.executeUpdate(sql); stmt.close(); conn.close(); response.sendRedirect("scoremanage.jsp");(4)测试运行①启动Tomcat。②打开浏览器,输入地址http://localhost:8080/xscjgl/default.html(注:地址中的localhost也可为或你的计算机在局域网中的IP地址,default.html为系统首页文件),即可显示成绩管理界面,如图10-42所示。图10-42“学生成绩管理”功能效果图知识点6:

ASP.NET编程知识10.3.1ASP.NET与数据库的连接10.3.2ASP.NET与SQL结合操作数据库10.3.3ASP.NET的数据绑定技术10.3.4使用ASP.NET开发数据库应用程序实例1、ASP.NET的运行机制

当用户通过浏览器发出一个对*.aspx文件的请求时(HTTP:Request),Web服务器响应该HTTP请求,调用ASP.NET引擎(aspnet_isapi.dll),将其解析成源程序代码,由CLR编译器编译为一致的IL格式,再由JIT编译器编译成机器代码,并将其当成“类(DLL文件)”来处理,此后,当再有对此页面的请求时,由于ASPX页面已经被编译过,所以,CLR会直接执行编译过的代码,最后由Web服务器生成标准的HTML页面传送给客户浏览器(HTTP:Response)。

知识点6:

ASP.NET编程知识2、ASP.NET的网页架构及编程特点基本上有下列几类文件:

①ASP.NET文件(*.aspx)。②强化后的Global.asax文件,新增为16种事件过程。③包含文件(*.inc或*.aspx)或“CodeBehind”文件。④应用程序配置(web.config)文件,可让Web开发者一次指定整个Web应用程序的配置,节省一个个设置的时间。⑤位于Web应用程序目录下的Pagelet(*.ascx可重复使用的自定义控件)与WebService(*.asmx可被调用的远程组件程序逻辑)。

知识点6:在ASP.NET中访问SQLServer

1、ASP.NET与数据库的连接(1)使用ADO.NETManagedProvider(2)使用SQLManagedProvider

2、ASP.NET与SQL结合操作数据库(1)Command对象的使用

ASP.NET通过ADO.NET的连接对象实现了同数据库的连接后,就可使用Command对象来执行SQL命令,从而实现对数据库的操作,并在浏览器上动态地查询、修改、删除和插入数据库的记录信息。Command对象、SQL语言及数据库之间的三角关系如图10-44所示:Command对象SQL语言数据库(2)DataReader对象的使用DataReader对象用于从数据源中读取只进且只读的数据流,使用DataReader每次在内存中始终只有一行,所以能提高应用程序的性能并减少系统开销,适合在检索大量数据时使用。它有两种:一是SQLServer专用的SqlDataReader,另一种则是通用型的OleDbDataReader。(3)DataSet对象的使用①创建一个数据库连接;②请求一个记录集合;③把记录集合暂存到DataSet;④如果需要,返回第②步(DataSet可以容纳多个数据集合);⑤关闭数据库连接;⑥在DataSet上作所需要的操作。(3)DataSet对象的使用例如:DimsqltextAsStringDimobjDAAsSqlDataAdapterDimobjDSAsDataSetsqltext="select*frombMajor"objDA=NewSqlDataAdapter'通过sqlDataAdapter变量创建sqlCommand对象objDA.SelectCommand=NewSqlCommand(sqltext,objConn)'将数据从数据源中取出,填充数据集objDS=NewDataSetobjDA.Fill(objDS,"bMajor")知识点7:

ASP.NET的数据绑定技术在ASP.NET中,我们可以将Dataset对象和DataGrid控件相结合以产生表格样式的效果,由于Dataset可存储一个以上的数据表内容,所以若想将DataGrid控件绑定到内存中的Dataset时,须指定DataSource属性结合至Dataset中的哪一个数据表及其所对应数据表的属性,然后再用DataGrid控件的DataBind()方法进行真正的绑定,如下代码所示:Grid1.DataSource=objDS.Tables(“bMajor”).DefaultViewGrid1.DataBind()…<asp:DataGridid=”Grid1”runat=”Server”…/>任务5:使用ASP.NET开发学生成绩管理系统【任务描述】在VisualStudio.NET2005中使用ASP.NET技术设计学生成绩管理系统中的“专业信息浏览与维护”功能模块,要求实现专业信息的显示、修改和删除功能。【任务分析】要实现本任务的功能,在ASP.NET中只需创建两个文件:一个是用于显示信息的页面文件,其中包含一个能以表格显示信息的数据绑定控件;另一个是用于事件处理的代码隐藏文件,主要包含数据绑定、修改和删除的功能代码。【任务实现】(1)在C:\Inetput\wwwroot\下面新建一个文件夹,起名为“xscjgl”(2)生成新的解决方案

打开VS.NET,选择菜单【文件︱新建︱空白解决方案…】,在弹出的“新建项目”对话框中选择VisualBasic项目,模板选择ASP.NETWeb应用程序,在位置文本框中输入“http://localhost/xscjgl”,单击“确定”按钮,如图10-45所示。

图10-45“新建项目”对话框图10-46“添加新项”对话框(3)数据显示界面的设计。①在解决方案资源管理器中右击xscjgl,从弹出的快捷菜单中选择【添加︱添加新项…】命令,打开“添加新项”对话框。在其中选择“Web窗体”模板,名称文本框中输入“Major_list.aspx”,单击“打开”按钮,如图10-46所示。②右击Major_list.aspx文件,从弹出的快捷菜单中选择【打开】命令,打开该文件

下面将通过在此页面中添加一个能以表格显示信息的数据绑定控件来建立用户界面。由于DataGrid不但可以表格形式显示数据库中的数据,而且还支持数据项的选择、排序、分页和修改,所以,“专业信息浏览与维护”功能界面就用它来实现。其具体代码如下:<HTML><HEAD><title>专业信息浏览与维护</title></HEAD><bodybgcolor="#e6e4c4"link="#0000cc"vlink="#999999"alink="#ff0000"topmargin="0"><br><divalign="center"><TABLEcellSpacing="1"cellPadding="4"width="465"bgColor="#416327"height="136"><TRvAlign="top"bgColor="#e6e4c4"><TDwidth="460"height="10"bgcolor="#6d8e4d"></TD></TR><TRvAlign="top"bgColor="#e6e4c4"><TDwidth="460"height="18"><divalign="center"><fontsize="1"color="#0000ff"><b>--专业信息浏览与维护--</b></font></div></TD></TR><TRvAlign="top"bgColor="#e6e4c4"><TDwidth="460"height="15"><FormRunat="Server"ID="Form1"><TABLEborder="1"cellpadding="0"cellspacing="0"width="100%"bordercolorlight="#6d8e4d"bordercolordark="#e6e4c4"><TR><TD><asp:Labelid="lblShow"runat="server"/><p><ASP:DataGridid="MajorDataGrid"runat="server"HorizontalAlign="Center"Width="500"BackColor="#e6e4c4"BorderColor="#416327"ShowFooter="false"CellPadding="2"CellSpacing="0"Font-Name="隶书"Font-Size="12px"HeaderStyle-BackColor="#6D8E4D"HeaderStyle-ForeColor="#FFFFFF"HeaderStyle-Font-Bold="True"HeaderStyle-HorizontalAlign="Center"ItemStyle-BackColor="#e6e4c4"ItemStyle-Font-Name="宋体"ItemStyle-HorizontalAlign="Center"ItemStyle-VerticalAlign="Middle"AutoGenerateColumns="False"OnEditCommand="Major_ECmd"OnUpdateCommand="Major_UCmd"OnCancelCommand="Major_CCmd"DataKeyField="Major_Id"OnDeleteCommand="Major_Delete"><Columns><ASP:BoundColumnHeaderText="专业代号"DataField="Major_Id"ReadOnly="True"/><ASP:BoundColumnHeaderText="专业名称"DataField="Major_Name"/><ASP:BoundColumnHeaderText="系部代号"DataField="Depart_Id"ReadOnly="True"/><ASP:BoundColumnHeaderText="系部名称"DataField="Depart_Name"ReadOnly="True"/><ASP:EditCommandColumnHeaderText="操作"ButtonType="PushButton"EditText="修改专业名称"UpdateText="更新"CancelText="放弃"/><ASP:ButtonColumnHeaderText="DEL"ButtonType="PushButton"Text="删除"CommandName="Delete"/></Columns></ASP:DataGrid></p></TD></TR></TABLE></Form></TD></TR><TRbgColor="#e6e4c4"><TDwidth="460"height="4"bgcolor="#6d8e4d"></TD></TR></TABLE><br><palign=“center”><b><fontsize=“1”color=“#ff0000”>注意:1、修改操作只能修改专业名称,如其他项错误,则需将该专业删除;</font></b></p><p><b><fontcolor="#ff0000">2、如果该专业下已有班级则不能删除!</font></b></p><divalign="center"><p><fontsize="1">(注:每完成一次删除操作请进行页面的刷新,以显示最新数据)</font></p></div></div></body></HTML>(4)用于事件处理的代码隐藏文件的设计在解决方案资源管理器中右击Major_list.aspx.vb文件,从弹出的快捷菜单中选择【查看代码】命令,打开该文件,在其中输入如下代码。ImportsSystemImportsSystem.ConfigurationImportsSystem.DataImportsSystem.Data.sqlclientPublicClassMajor_listInheritsSystem.Web.UI.PageDimobjConnAsSqlConnection=NewSqlConnection("DataSource=localhost;UserID=sa;Password=;InitialCatalog=StudentScore")DimsqltextAsStringDimobjDAAsSqlDataAdapterDimobjDSAsDataSet'初始化页的用户代码PrivateSubPage_Load(ByValsenderAsObject,ByValeAsEventArgs)IfNotIsPostBackThenBindGrid()EndIfEndSub'将DataGrid控件绑定到内存中的Dataset上SubBindGrid()sqltext="selectMajor_Id,Major_Name,Depart_Id,Depart_NamefrombMajororderbyMajor_Id"objDA=NewSqlDataAdapter'通过sqlDataAdapter变量创建sqlCommand对象objDA.SelectCommand=NewSqlCommand(sqltext,objConn)'将数据从数据源中取出,填充数据集objDS=NewDataSetobjDA.Fill(objDS,"bMajor")'进行数据绑定MajorDataGrid.DataSource=objDS.Tables("bMajor").DefaultViewMajorDataGrid.DataBind()EndSubSubMajor_ECmd(ByValSenderAsObject,ByValeAsDataGridCommandEventArgs)'通过数据表格的EditItemIndex来使用EditCommandColumnMajorDataGrid.EditItemIndex=e.Item.ItemIndexBindGrid()EndSubSubMajor_UCmd(ByValSenderAsObject,ByValeAsDataGridCommandEventArgs)DimobjCmdAsSqlCommand'取出要修改专业名的Major_IdDimcontentIDAsInteger=MajorDataGrid.DataKeys(e.Item.ItemIndex)DimtbAsTextBox'定义修改数据的sql字符串sqltext="updatebMajorsetMajor_Name=@MajorNamewhereMajor_Id=@contentID"'创建sqlCommand对象objCmd=NewSqlCommand(sqltext,objConn)'获得更改的数据objCmd.Parameters.Add(NewSqlParameter("@contentID",SqlDbType.Char,2))objCmd.Parameters.Add(NewSqlParameter("@MajorName",SqlDbType.VarChar,40))'将获得的行键值传给命令参数

温馨提示

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

评论

0/150

提交评论