3 教务管理信息系统的具体实现 paper51.com 3.1 MicrosoftASP简介 内容来自论文无忧网 www.paper51.com Microsoft ASP战略基于一组开放的互联网协议,推出了一系列的产品、技术和服务,吹响了一次互联网技术变革的号角 。首先为了对Microsoft ASP开发框架有一个整体的认识,如下图所示[4]: 内容来自论文无忧网 www.paper51.com http://www.paper51.com 图6 MicrosoftASP开发框架 copyright paper51.com 从上图可以简要的了解ASP开发框架的几个主要组成部分:首先是整个开发框架的基础,即通用语言运行时以及它所提供的一组基础类库;在开发技术方面,ASP提供了全新的数据库访问技术ADO ASP,以及网络应用开发技术ASP ASP和Windows编程技术Win Forms。而其中的ASP是下一代ASP(Active Server Page),是ASP构架的重要组成部分。超绝的性能加上微软的实力,可以预见不久ASP将成为互联网开发的首选。 内容来自论文无忧网 www.paper51.com 3.2 运用ASP技术操作数据 http://www.paper51.com
3.2.1 ASP简介 内容来自www.paper51.com ASP不仅仅是下一版本的Active Server Page (ASP);它是统一的Web开发平台,用来提供开发人员生成企业级Web应用程序所需的服务。ASP的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,用于生成更安全、可伸缩和稳定的应用程序。可以通过在现有ASP应用程序中逐渐添加ASP功能,随时增强该ASP应用程序的功能[5]。 http://www.paper51.com ASP是一个已编译的、基于ASP的环境,可以用任何与ASP兼容的语言包括Visual Basic。NET、C#和JScript ASP.)创作应用程序。另外,任何ASP. NET应用程序都可以使用整个 ASP框架。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。 内容来自论文无忧网 www.paper51.com ASP的结构中, IIS(Internet Information Services)为Windows NT/2000/XP操作系统的一个组件,所有Web客户端和ASP应用程序之间的联系都必须通过IIS来进行。ASP应用程序是建立在ASP框架技术的基础上的,因此在这些应用程序中可以充分利用由ASP框架技术提供的各种特性(例如Web表单和Web服务),通过对这些特性的利用,体现ASP框架技术对RAD(Rapid ApplicationDevelopment)和OOP(Object-OrientedProgramming)技术的支持,实现减少编程工作量和快速开发的目标。 paper51.com ASP的结构如下图所示: paper51.com
图7 ASP结构图 paper51.com 下面的篇幅,本文将主要介绍利用ASP连接数据库,并利用Web表单控件DataGrid来显示、操作从数据库中读取的数据的方法。 内容来自论文无忧网 www.paper51.com 3.2.2 ASP与数据库 内容来自论文无忧网 www.paper51.com 在Internet还没有开始流行的年代,Client/Server体系的二层结构是局域网环境中数据库应用系统的主流结构。随着Internet的渗透,数据库应用系统开发及实施的方法发生了重大的变化,从Client/Server体系的二层结构扩展到了由Web浏览器、应用服务器、数据库服务器组成的Browser/Server体系的三层结构。在如图8所示的三层结构的数据库应用系统中,客户端不需要安装什么设备与软件,只需要一个Web浏览器,负责显示应用服务器端的运行结果,借助于Java Applet、VBScript、JavaScript、ActiveX等技术进行一些简单的客户端事务处理。应用服务器端负责接受远程或本地的页面请求,然后运行服务器端脚本,借助于CGI、ADO等中间部件把数据请求发送到DB Server上以获取相关数据,再把结果数据转化成HTML及各种脚本传回客户端的Web浏览器。数据库服务器端负责管理数据库,处理数据更新及完成查询要求、运行存储过程[6]。三层结构示意图: 内容来自论文无忧网 www.paper51.com Windows NT/2000/XP paper51.com 操作系统 paper51.com 图8 ADO三层结构图 内容来自论文无忧网 www.paper51.com
在早期的文件服务式Web应用中,页面都是静态的,发布数据是由手工完成的,需要付出大量的劳动力,才能更新数据。如何动态发布数据,乃至实时刷新数据,成为动态Web数据库应用系统得以实现的关键技术。在ASP框架技术没有推出之前,很多动态Web应用都是运用ADO和ASP技术来实现的,通过这两种技术的运用,可以很好地实现页面的动态更新。但是与ASP框架技术相比较,运用ADO和ASP技术实现的动态Web应用需要进行大量的编程工作,而在ASP框架技术中提供了一些功能非常强大的窗体控件,可以节省大部分的编程工作。 内容来自www.paper51.com 开发动态Web数据库应用系统,主要使用到ASP框架技术中的ADOASP组件和ASP技术。其中ADOASP组件用来实现数据库连接、检索数据、更新数据;ASP技术用来实现对数据的显示、编辑[12]。 内容来自www.paper51.com
3.2.3 运用ASP技术操作数据 copyright paper51.com (2)建立连接。利用SqlConnection对象的ConnectionString属性可指定连接参数[4]。例如: copyright paper51.com Protected System.Data.SqlClient.SqlConnection MysqlConnection; 内容来自www.paper51.com MysqlConnection=new SqlConnection(connectionString);//初始化联接 http://www.paper51.com MysqlConnection.Open();//打开联接 copyright paper51.com (3)读取数据。利用SqlDataAdapter对象的Fill方法可将数据库中的数据读到DataSet中。例: http://www.paper51.com
Protected System.Data.SqlClient.SqlDataAdapterMySqlDataAdapter; 内容来自www.paper51.com MyDataAdapter = new SqlDataAdapter(“SELECT * FROM CommyInfo”, MysqlConnection); //初始化一个适配器 http://www.paper51.com protectedSystem.Data.DataSet MyDataSet; 内容来自www.paper51.com MyDataSet = new DataSet(); copyright paper51.com MySqlDataAdapter.Fill(MyDataSet,“table1”); 内容来自www.paper51.com (4)更新、删除、插入操作。利用SqlCommand对象设置相应的SQL命令来完成相应的操作。例: paper51.com
执行查询SQL的语句,返回一个数据表: paper51.com
public static DataTable executeQuery(stringQueryString) 内容来自论文无忧网 www.paper51.com { copyright paper51.com DataTable MyDataTable=new DataTable();//初始化数据表 paper51.com DataSet MyDataSet=new DataSet(); 内容来自论文无忧网 www.paper51.com
try paper51.com
{ paper51.com MysqlConnection .Open(); 内容来自www.paper51.com SqlDataAdapter sqlDataAdapter=newMySqlDataAdapter(QueryStrng,MysqlConnection); //初始化一个适配 器 内容来自www.paper51.com
MysqlDataAdapter.Fill(MyDataSet,”Table”);//利用Fill方法将数据库中的数据读DataSet中 内容来自www.paper51.com
MyDataTable=MyDataSet.Tables[”Table”]; 内容来自论文无忧网 www.paper51.com } http://www.paper51.com catch(Exception e) 内容来自www.paper51.com { paper51.com MessageBox.Show(e.Message.ToString()); 内容来自www.paper51.com } http://www.paper51.com return MyDataTable; http://www.paper51.com
} http://www.paper51.com 执行非查询语句,对数据库进行操作: copyright paper51.com public staticvoid executeNonQuery(string cmdText) 内容来自论文无忧网 www.paper51.com { copyright paper51.com try 内容来自论文无忧网 www.paper51.com { paper51.com
MysqlConnection .Open(); http://www.paper51.com
SqlCommand MySqlCommand =newSqlCommand(NonQueryString, MysqlConnection); copyright paper51.com MySqlCommand.ExecuteNonQuery(); 内容来自论文无忧网 www.paper51.com
} copyright paper51.com catch(Exception e) http://www.paper51.com { paper51.com MessageBox.Show(e.Message.ToString()); paper51.com
} 内容来自论文无忧网 www.paper51.com } copyright paper51.com
3.2.4 DataGrid控件的数据绑定 paper51.com
MyDataGrid.DataSource=MyDataSet.Tables[”Table”];; copyright paper51.com MyDataGrid.DataBind(); copyright paper51.com 3.2.5 DataGrid控件的定义 copyright paper51.com <asp:DataGrid id=”DataGrid1” runat=”server” DataKeyField=”id”Font-Size=”Smaller” PageSize=”8” AllowPaging=”True” AllowSorting=”True”AutoGenerateColumns=”False” CellPadding=”4” BackColor=”White” BorderWidth=”1px”BorderStyle=”None” BorderColor=”#CC9966” Height=”316px” Width=”878px”> 内容来自www.paper51.com </asp:DataGrid> http://www.paper51.com 如下图所示: http://www.paper51.com 图9 DataGrid示意图 内容来自www.paper51.com DataGrid在输出HTML是设计成以表格的形式输出数据。每一条记录输出时会建立一对<tr>标签,而每个字段的值输出时则建立一对<td>标签。 copyright paper51.com DataGrid含有几个属性可以提高其可用性。如,通过设置DataGrid的AllowSorting属性为true,并加入少量代码,DataGrid就具备了按不同字段排序的功能。此外,设定相关属性来实现分页以及单条记录编辑的功能更加增强了DataGrid的可用性。除了在可用性方面的支持以外,DataGrid同时也相当节省开发时间。使用DataGrid在WEB页面上显示数据只需要两行代码。一行用来设定与DataGrid绑定的数据源(DataSource),另一条则用来执行绑定命令(DataBind()。 http://www.paper51.com 7 又再,DataGrid控件的AutoGenerateColumns属性的功能,此属性的默认值为true。当设置为true时,DataGrid将使用reflection检查其数据源和对象,并为每个公用属性或字段创建一个列。若DataGrid的AutoGenerateColumns属性被设置为假,会阻止控件自动生成列,而让用户负责定义将要在表中表示的列。这样有许多好处: copyright paper51.com
8 可控制列的顺序。以声明的顺序表示列。另一方面,自动生成的列是用映像检索到的顺序表示的,此顺序不必与代码中的列顺序或数据库表本身的列顺序相匹配。 http://www.paper51.com 9 可以用列的headerText属性来指定每列的标头。在前一个示例中,列标头指明了字段名,这可能并不合适。当在此模式下使用控件时,Columns还提供其它可设置的属性。 paper51.com 10 自动生成的列的类型始终是BoundColumn。指定列集合使用户可以控制每列的类型。 内容来自论文无忧网 www.paper51.com
每个在DataGrid中的列都是DataGridColumn类的一个实例。有四种DataGrid列的形式: 内容来自www.paper51.com 1 BoundColumn 绑定列 内容来自www.paper51.com 2 ButtonColumn 按钮列 内容来自www.paper51.com 3 HyperLinkColumn 超级链接列 paper51.com 4 TemplateColumn 模板列 内容来自www.paper51.com 每种类型都会以一种方式允许页面访问与DataGrid进行交互。BoundColumn将DataSource的字段值显示为纯文本;ButtonColumn不绑定任何的字段,它包含有五种DataGrid的事件:DataGrid1_SelectedIndexChanged选择,DataGrid1_EditCommand编辑,DataGrid1_CancelCommand取消,DataGrid1_UpdateCommand新,DataGrid1_DeleteCommand删除,只需要添加少量代码,DataGrid就具备对绑定数据进行删除,更新的功能;HyperLinkColumn将其显示为一个超级链接;TemplateColumn则是将绑定了的字段列转换为可以编辑的模板。另外,开发者可以通过写一个继承自DataGridColumn的自定义类来定制DataGrid列的样式。 内容来自www.paper51.com 因为DataGrid是从WebControl得到的,所以DataGrid控件继承了诸如Width、BackColor、BorderStyle和Font.Name之类的样式属性。此外,DataGrid提供诸如CellPadding这样的属性,这些属性是特定于表的。这些属性允许从总体上定制控件。设置的若干项目样式,如headerStyle和Alternating 、ItemStyle。这些样式控制着它们相应项目的外观。 DataGrid还允许格式化其单元格中的文本内容。这是通过设置Bound Column的DataFormatString属性值完成的。该列使用其格式说明格式化使用String.Format的单元格内容。此属性可随格式化类型(如日期或货币)一起预置或附加任意内容。此外,由于格式考虑了当前页的CultureInfo和请求,所以它也支持全局化。如果未指定格式,则使用该值的ToString方法。 copyright paper51.com
DataGrid处理命令事件,该事件是通过包含在其项目中的按钮触发的。它识别标准命令,该命令使其更改它的属性,并通过触发此事件来将此更改通知用户的代码。如下例子说明如何通过处理DeleteCommand事件,利用DataGrid中的选择: paper51.com Privatevoid DataGrid1_DeleteCommand( object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) 内容来自www.paper51.com { 内容来自www.paper51.com String StrSql=”Delete From commyinfo WhereID=”+DataGrid1.DataKeys[e.Item.ItemIndex].ToString(); 内容来自论文无忧网 www.paper51.com
MysqlConnection .Open(); copyright paper51.com SqlCommand MySqlCommand =new SqlCommand(NonQueryString, MysqlConnection); http://www.paper51.com MySqlCommand.ExecuteNonQuery(); 内容来自论文无忧网 www.paper51.com } http://www.paper51.com 此 .cs文件包含处理DeleteCommand事件以及在DataGrid下显示选定标题的ID的逻辑。DataGrid处理命令事件,该事件是通过包含在其项目中的按钮触发的。它识别标准命“Delete”,并通过触发此事件来将此更改通知用户的代码。ID是通过访问DataKeys集合进行检索的。该集合是因为设置了DataKeyField属性而置入的。通常,将它设置为主关键字或使用户可以唯一标识项目的某些其它字段,并将此信息用作后续的数据库查询或过滤数据中的准则。 内容来自www.paper51.com
由以上可知DataGrid是迄今为止功能最为丰富的控件,DataGrid具有这么多的增强可用性的属性。但是尽管DataGrid有这样那样令人印象深刻的优点,它的两个缺点也同样不能忽视。首先,如前所述,DataGrid在个性化输出数据方面功能有限。当然,可以定制字体、颜色以及线条宽度等等,但它始终只能是HTML表格。DataGrid的第二个缺陷是它的性能。相对于DataList ,Repeater来说,DataGrid性能要差一些。由DataGrid所生成的ViewState相当庞大,特别是在DataGrid含有较多的行时。当然,可以关闭ViewState功能,但代价是将不能使用排序、分页以及记录编辑等功能。但是,取精去糟来说,DataGrid还是提供了不少的方便。 http://www.paper51.com |