课后习题答案
1.5 习题与上机练习
1.填空题
(1)HTTP 协议
(2)B/S;Web 工作
(3) http://localhost
2.选择题
(1) D
(2) A
3.简答题
(1)C/S 结构与 B/S 结构的区别(参见表 1-1)
(2)首次请求ASP.NET页面的处理过程如下:
Web 浏览器发送一个 HTTP 请求到 Web 服务器。
服务器分析这个 HTTP 请求,定位所请求的网页位置。
如果请求的是一个 HTML 文件,则服务器直接返回该文件。如果请求的是 ASP.NET 文件,
IIS 就把它传送到 aspnet_isapi.dll 并提交给 CLR 进行处理。若是首次请求该 ASP.NET 文件,就由 CLR
编译并执行,得到纯 HTML 文件;否则,直接执行编译好的程序。
④ 最后把从中得到的 HTML 文件传回浏览器作为 HTTP 响应。
⑤ 浏览器收到这个响应之后,显示 Web 网页。
ASP.NET程序是编译执行的。当用户第一次执行一个ASP.NET文件时,IIS就把该文件传送到
aspnet_isapi.dll进行处理,后者把它提交给CLR,CLR将其编译成DLL文件并执行。若是以前执行过
该ASP.NET文件,就直接执行编译过的DLL文件,这样速度就非常快。所以,第一次执行ASP.NET程
序时会很慢。
(3)客户端脚本语言都是解释型的,基于对象的脚本语言,其工作机制是:将脚本嵌入到web页面
中,并随着HTML文件一起传送到客户端,由浏览器解释执行。客户端脚本的解释器位于Web浏览
器中。客户端脚本语言编写的程序通常用来界定。
服务器端脚本都运行在服务器端,能够动态的生成网页,脚本运行不受客户端浏览器限制,
脚本程序都是将脚本语言嵌入到HTML文件中,执行后返回给客户端的是HTML代码。服务器端脚
本的解释器位于Web服务器中。
2.4 习题与上机练习
1.填空题
(1); ;
。
(2); | ; 像素 。
(3)name; method ; POST ;action。
(4)选择器; 属性; 属性值。
2. 选择题
(1)A (2)C (3)A (4)A
(6)D (7)A (8)C (9)C
(5)B
(10)A.
3. 上机练习 (略)
3.6 习题和上机练习
1.选择题
(1)A (2)A
(6)A (7)C
(3)D
(8)D
(4)B (5)B
(9)B (10)D
2. 程序题
how are you are
3. 简答题
(1)在页面中引入 Javascript 有三种方式:
a.使用
C#语句:
class HelloWorld {
static void Main( )
{
System.Console.WriteLine("祝你好运!");
}
}
④ ASP.NET 语句:
4. 上机练习 (略)
7.5 习题和上机练习
1.简答题
(1)列举ADO.NET体系结构中的常用对象,并说明各对象的作用。
1)Connection对象:用于建立与指定数据源的连接;
2)Command对象:同数据源建立会话,发送命令并接收命令执行结果;
3)DataReader对象:用于接收查询命令的执行结果,获得一个只读且只进的数据流;
4)DataAdapter对象:作为数据源与DataSet之间的桥梁,可以从数据源获取数据填充到
DataSet中,也可以依照DataSet中的修改更新数据源;
5)DataSet对象:作为数据的内存映像,可以在内存中建立表、行、列,并维护多表之间的
关系和约束等;可以看作是离线的数据库;
6)DataTable:内存表,可以看作是离线的数据库表,能够从数据源中加载数据到内存表,
然后使用内存表中的数据来更新页面显示。
(2)试比较DataReader与Dataset对象的异同。
1)DataReader是一种基于连接的对象,使用时要保持数据库的连接;按顺序从数据库中获取
数据;只能使用这些数据而不允许更改数据;每次只能从数据源中获取一条数据,占用资源极少,
效率极高;
2)DataSet是一种离线的数据对象,可以批量加载数据到内存,在断开数据源连接后依然可
以访问数据;可以随机的访问数据,并实现数据的排序、过滤等功能;相应的,DataSet占用系统
资源较大,访问效率不及DataReader对象。
(3)在ADO.NET中调用存储过程与执行SQL命令的方法有什么区别?
1 ) 执 行 SQL 语 句 时 , CommandType 属 性 为 TEXT , 而 执 行 存 储 过 程 时 CommandType 属 性 为
StoredProcedure;
2)执行SQL语句时,CommandText属性为SQL语句,而执行存储过程时为存储过程名。
(4)如何在Web.config文件中保存连接字符串,如何在程序中访问该字符串?
有2种方式:
1)保存到
节点中,例如:
providerName="System.Data.SqlClient"/>
在代码中采用如下方式获取它:
ConfigurationManager.ConnectionStrings("constr").ConnectionString
2)保存到
节点中,例如:
在代码中采用如下方式获取它:
ConfigurationManager.AppSettings["connstr"];
(5)在使用Command对象操作数据库时,分别说明什么情况下应调用ExecuteReader()方法、
ExecuteScalar()方法和ExecuteNonQuery()方法。
ExecuteReader 方法用于执行普通查询命令,返回 SqlDataReader 形式包装的结果集;
ExecuteScalar()方法用于执行聚合查询(例如 count、average 等聚合函数),返回结果为单值;
ExecuteNonQuery()方法用于执行非查询语句,例如 Insert,Update 等,一般返回一个整数,
代表受影响的记录条数;
(6)试举例说明如何遍历DataTable中的数据。
最简单的方法是使用foreach循环进行遍历:
foreach (DataRow row in dt.Rows) {
// 访问DataRow对象row中的数据,例如
string userName = row["name"].ToString();
}
(7)试举例说明如何在DataTable中按主键快速检索特定行的数据。
需要先在DataTable上定义主键,然后在行集上使用Find方法。例如:
// 为数据表定义主键列
DataColumn[] columns = new DataColumn[1];
columns[0] = dt.Columns["ProductID"];
dt.PrimaryKey = columns;
// 根据主键进行检索(查询商品号为5的行)
DataRow findrow = dt.Rows.Find(5);
// 输出检索结果
if (findrow != null)
lblmsg.Text = findrow["ProductName"].ToString();
(8)什么是ORM,它的作用是什么?列举几种常用的ORM框架。
ORM:Object-Relational Mapping,即对象-关系映射技术。
ORM能够自动匹配面向对象编程中的对象与关系数据库中的关系,实现两者之间的映射;在检
索数据时能够自动将检索到的记录映射为对象集合,在保存数据时能够自动将对象的更改持久化
到数据库表中,从而大幅度减少数据访问及持久化操作的代码量。
目前比较常用的几个ORM框架有:JAVA 开发中的Hibernate、MyBatis,以及.NET开发中的
Entity Framework等。
(9)采用实体框架进行数据库应用开发时,有哪几种开发方式可以选择?如何选择?
有三种开发方式供选择:Database First方式, Model First方式,及Code First方式。前2
种方式都借助于Visual Studio工具进行可视化建模,生成扩展名为“.edmx”的模型文件;而第
三种方式不依赖可视化工具,不生成模型文件。
1)若已建好数据库,可以选择Database First方式,这时可以借助VS提供的可视化工具,根
据数据库结构自动生成应用程序中的实体对象模型;
2)若尚未建立数据库,可以采用Model First方式,借助VS的可视化的设计工具来设计概念模型,
然后借助实体框架自动生成DDL(数据定义语言)语句,并自动创建数据库;
3)Code First方式是灵活性最大的一种方式,不管事先有没有建立数据库,都可以抛开可视化设
计工具,而采用手工编码的方式使用实体框架。如果尚未建立数据库,可以先创建实体类,然后根据
实体类的编码来创建数据库;如果已经建立了数据库,也可以根据数据库结构来自动生成实体类;
(10)什么是ER图,它有哪些核心要素?数据库设计中的ER图如何映射到面向对象程序中的类和
对象。
ER图即Entity Relationship Diagram,实体关系图,是数据库概念模型设计的重要工具。
ER图中的核心要素有三个,即:实体、属性、关系。
将ER图映射到面向对象代码时,实体通常映射为类和对象,实体属性通常映射为类的属性,
而实体间的关系通常使用外键属性及导航属性来表达。
(11)什么是LINQ,它有什么作用,有哪几种书写方式?
LINQ即Language Integrated Query,语言集成查询。
LINQ是.NET为C#和VB语言提供的一种新特性,允许开发者通过高级语言代码来查询数据;查询
的语法与SQL语句比较类似,但用途更广,其查询的目标可以是对象集合、实体集合、DataSet数
据集、XML数据源以及SQL数据库等。
目前LINQ表达式有2种书写方式:LINQ查询(LINQ Query)方式,以及链式API(Fluent API )
方式。
(12)在实体框架中,加载关联实体的方式有哪几种?如何选择。
有三种方式:提前加载,延迟加载,以及显式加载。
提前加载即在加载一个实体时,同时加载与该实体相关联的实体数据;这种方式加载的数据
量大,被加载的关联实体数据也可能并不会被使用,导致无用的加载;但如果要使用关联实体的
数据,则这种方式加载数据的效率更高。
延迟加载即在加载一个实体时,暂不加载与其相关联的实体数据,而只有在第一次引用这些
被关联的实体数据时系统才自动加载;这种方式不会加载过多的无用数据,减轻了服务器的负荷;
但若应用中要频繁的使用关联实体数据,而又采用这种方式加载,则加载效率很低;
显式加载即在被关联实体的对象上显式的调用load方法进行加载;这种方式完全由用户控制
数据加载,提供了最大的灵活性,但代码量大,编程效率不高。
三种方式没有绝对的优劣,实际应用中,应根据用户的具体要求,合理选择开发方式。
2. 上机练习(略)
8.5 习题与上机练习
1.选择题
(1)A (2)A (3)A (4)A
(5)B
2.简答题
(1)构造一个课程的集合,每门课程包含课程号、课程名、学时等数据项;在页面上添加一
个课程列表框,能够显示集合中所有课程的名称,但提交所选的课程号。请写出代码。
if (!Page.IsPostBack){
ArrayList courses = new ArrayList();
courses.Add(new Course("1001", "高等数学", 80));
courses.Add(new Course("1002", "大学英语", 96));
courses.Add(new Course("1003", "大学计算机", 64));
ddlCourse.DataSource = courses;
ddlCourse.DataTextField = "CourseName";
ddlCourse.DataValueField = "CourseID";
ddlCourse.DataBind();
}
()在SqlDataSource 配置使用命令参数时,可采用哪几种方式获得参数值?举例说明。
可 以 选 择 : ControlParameter , SessionParameter , CookieParameter , FormParameter ,
ProfileParameter,QueryStringParameter,RouteParameter等;示例略。
(3)试比较GridView、DetailView、FormView和ListView四种控件的特点,分别说明每种控件
的用途。
1)GridView是一个全能型的数据绑定控件,它以表格的形式显示多条数据,每行显示一
条记录;同时还提供了很多易用的特性,包括数据分页、排序、选择以及编辑、保存
等;使用GridView,可以用极少的代码量来实现很强大的功能。
2)DetailView使用表格布局的方式显示单条记录的详细信息,每行显示记录中的一个数
据项;
3)FormView用于单条记录的显示和编辑,支持自定义样式模板,使用非常灵活;
4)ListView是一个非常灵活的轻量级控件,完全根据自定义的模板来呈现内容,并且提
供了对选择、编辑等高级特性的支持;使用ListView最常见的原因是为了创建特殊的
布局,例如创建在一行中显示多个项目的表,或者彻底脱离基于表格的呈现。
(4)在处理GridView的行数据时,通常可以使用哪些行命令?分别会触发哪些行事件?
针对GridView的行,通常可以执行以下的命令:
Delete:删除一行数据
Edit:编辑一行数据
Update:使用更改的数据执行更新
Cancel:放弃更改的数据
Select:选择一行数据
相应的,会触发如下的事件:
RowDeleting,RowDeleted;
RowEditing,RowUpdating,RowUpdated,RowCancelingEdit;
SelectedIndexChanging、SelectedIndexChanged;
(5)GridView的模板列中,可以使用哪些常用的模板类型?分别代表什么?
常用的模版类型如下:
1)ItemTemplate:普通项目模板,用于浏览状态;
2)AlternatingItemTemplate:交替项模板,浏览状态下使相邻的两行数据采用不同的样
式显示,增强对比度。
3)EditItemTemplate:编辑项模板,只对当前EditIndex指向的项目起作用,用于编辑数
据;
4)HeaderTemplate:表头的模板;
5)FooterTemplate:页脚的模板
(6)在模板列中,使用Eval和Bind方法都可以绑定到数据项,试比较两种用法的异同。
1)Eval方法可以计算数据绑定表达式的值,并将其绑定到控件上显示,当数据修改时不
能将修改内容回传给数据源;
2)Bind方法不仅能够将数据绑定到控件,而且当控件内容发生改变时还能将更改后的数
据回传给数据源;
3.上机练习(略)
9.5 习题和上机练习
1、简要描述 Web 开发中常用的三层体系结构;
在 Web 开发中,通常将软件的逻辑结构分为三层,称为三层体系结构:
表示层:负责应用程序的界面展示及用户交互;
业务层:负责应用程序的核心业务处理逻辑;
数据访问层:负责数据库的访问及数据持久化逻辑;
采用三层体系结构,有利于降低软件组件的复杂度,也利于实现人员分工等。
2、什么是 MVC 设计模式,引入 MVC 模式有什么好处;
MVC 即模型-视图-控制器模式,是一种广泛使用的表示层设计模式,其核心组件包括:
Model:模型,代表应用程序的数据模型和处理逻辑模型;
View:视图,代表应用程序的界面组件,负责数据展示及用户交互;
Controller:控制器,连接视图与模型的桥梁,接收用户的请求,委派合适的模型组件处理请
求,并选择合适的视图组件显示处理结果。
MVC 设计模式能够解耦用户界面与后台处理逻辑,非常利于搭建表示层的代码框架;借助
MVC 框架,可以指导大型软件的有序开发,降低软件组件的复杂度,并大幅度提高开发效率。
3、总结说明 MVC 框架如何实现请求的委派处理。
当客户端发送请求时,MVC 框架会截获该请求,获取请求的方法及 URL;
根据路由配置中的 URL 映射规则,URL 通常被分解为“controller”、“action”和“id”三部分;
根据“Controller”获得处理该请求的控制器类名,根据“Action”获得处理请求的方法名,于
是 MVC 框架调用指定控制器中的指定方法处理请求;如果 URL 中包含“id”,则将“id”作为参数
传递给请求处理方法;
至于客户端的请求方法(Get、Post 等),会在路由选择时,与“Action”项配合使用,确定处
理请求的方法。
4、对于 MVC 框架中的视图组件,通常用到哪几类视图文件
通常有三类视图文件:
1)布局视图:用于控制页面的整体布局,例如“_Layout.cshtml”;
2)局部视图:代表页面中的局部区域,例如“_LoginPartial.cshtml”;
3)普通视图:普通的视图页面,可能引用了某布局视图,于是将自身的内容插入到布局视图