ASP.NET程序设计教程(C#版)第4版 课件 第11、12章 LINQ to SQL数据库操作ASP.NET MVC_第1页
ASP.NET程序设计教程(C#版)第4版 课件 第11、12章 LINQ to SQL数据库操作ASP.NET MVC_第2页
ASP.NET程序设计教程(C#版)第4版 课件 第11、12章 LINQ to SQL数据库操作ASP.NET MVC_第3页
ASP.NET程序设计教程(C#版)第4版 课件 第11、12章 LINQ to SQL数据库操作ASP.NET MVC_第4页
ASP.NET程序设计教程(C#版)第4版 课件 第11、12章 LINQ to SQL数据库操作ASP.NET MVC_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第11章LINQtoSQL数据库操作本章讲述的主要内容11.1LINQ的概念11.2使用LinqDataSource控件11.3使用LINQtoSQL的对象和方法11.4实训使用LINQtoSQL操作数据库

11.1LINQ的概念11.1.1LINQ的构成LINQ的组成架构如图所示。11.1LINQ的概念11.1.2与LINQ相关的几个概念1.匿名类型“匿名类型”也称为“隐式类型”或“推断类型”,如果在程序中需要使用到临时类型,而又不希望去创建相应的类时,可以考虑使用匿名类型。匿名类型使用var关键字进行声明。例如:var

stuinfo=new{StuName="张三",StuID="2009000234",StuAge=20};11.1LINQ的概念11.1.2与LINQ相关的几个概念2.泛型要使用泛型需要引入System.Collections.Generic命名空间。例如,下列语句声明并初始化了一个名为MyGeneric,用于表述一个字符串列表的泛型集合。List<string>MyGeneric=newLinst<string>;MyGeneric.Add("zhangsan");MyGeneric.Add("2009000234");MyGeneric.Add("工程机械0901");在VisualStudio2008中可以将上述代码简化为如下所示:List<string>MyGeneric=newLinst<string>{"zhangsan","2016000234","工程机械1601"};11.1LINQ的概念11.1.2与LINQ相关的几个概念3.扩展方法使用扩展方法可以为一些现有的类增加某种特定的功能。也就是向一个现有的类中添加新的静态方法(注意必须是静态的)。创建扩展方法的语法格式如下所示:publicstaticclass静态类名称{publicstatic返回值类型方法名称(this作用类型形参1[,形参2]……){扩展方法的方法体语句}}11.1LINQ的概念11.1.2与LINQ相关的几个概念4.Lambda表达式

Lambda表达式是.NETFramework3.5的一个新特性,它提供了一种极为简洁的定义方法的方式。它是从.NETFramework1.0中的“委托”和.NETFramework2.0中的“匿名方法”过渡而来的。(1)委托:委托实际上是一个函数指针,将问题的处理指向一个方法。(2)匿名方法:在实际应用中被调用方法的具体名称无关紧要,关键是方法体的返回值。所以在.NETFramework2.0中引入了“匿名方法”的概念。如下列代码所示,使用匿名方法无需首先创建方法,而是将方法体语句直接书写到委托实例化语句中,并用大括号将其括起来

11.1LINQ的概念11.1.2与LINQ相关的几个概念4.Lambda表达式

(3)过渡到Lambda表达式

Lambda表达式是一个匿名函数,它可以包含表达式和语句块。可用于创建委托或表达式目录树类型。所有Lambda表达式都使用Lambda运算符“=>”,该运算符读为“goesto”。该运算符的左边是输入参数(如果有的话),右边包含表达式或语句块。11.1LINQ的概念11.1.2与LINQ相关的几个概念5.对象关系设计器对象关系设计器也称为O/R设计器,用来自动生成与数据库表对应的DataConText类。DataConText类是LINQtoSQL框架的主入口点,所有实体对象与关系型数据库中数据的转换就是依靠DataConText类来完成的。创建DataConText类可以通过手工的方法,也可以使用O/R设计器自动完成。当我们向ASP.NET网站中添加一个“LINQtoSQL类”时,系统将自动打开O/R设计器。从服务器资源管理器窗口中,将数据库表、存储过程等拖动到O/R设计器中,即可自动生成需要的DataConText类或方法。11.2使用LinqDataSource控件11.2.1创建DataContext类5.对象关系设计器1)添加一个LINQtoSQL类的新项2)屏幕自动切换到O/R设计器窗口3)数据表从服务器资源管理器中拖动到O/R设计器的左窗格11.2使用LinqDataSource控件11.2.2配置LinqDataSource使用LinqDataSource配置向导。11.2使用LinqDataSource控件11.2.3LinqDataSource控件使用示例本节将以一个实例说明使用LinqDataSource控件配合FormView控件现实常规数据库操作的方法。

参阅源代码:ex11-211.3使用LINQtoSQL的对象和方法11.3.1返回数据表中的全部记录(select语句)1.返回全部记录的全部列下面的代码说明了在此基础上如何使用LINQtoSQL返回数据表StudentInfo中所有数据的方法。protectedvoidButton1_Click(objectsender,EventArgse){DataClassesDataContext

db=new

DataClassesDataContext();

var

Stuinfo=fromStuTablein

db.StudentInfoselectStuTable;GridView1.DataSource=Stuinfo;GridView1.DataBind();}11.3使用LINQtoSQL的对象和方法11.3.1返回数据表中的全部记录(select语句)2.返回全部记录的部分字段如果希望只返回全部记录的部分字段值(例如,只返回“学号”studentID和“电子邮件”Email),可将select子句改为如下内容。其中,new{StuTable.StudentID,StuTable.Email}语句创建了一个包含了2个属性的新匿名类型。selectnew{StuTable.StudentID,StuTable.Email};11.3使用LINQtoSQL的对象和方法11.3.1返回数据表中的全部记录(select语句)3.返回某条记录的某个字段值下列语句表示了从查询结构中取出某行某列值的方法。语句使用ToList()方法,将sinfo转换成List<>泛型集合后,取出其中的字段值,即将查询结果中第一条记录的StudentID字段值显示到标签控件中。protectedvoidButton1_Click(objectsender,EventArgse){DataClassesDataContext

db=new

DataClassesDataContext();

var

StuInfo=fromStuTableindb.StudentInfoselectStuTable;Label1.Text=StuInfo.ToList()[0].StudentID;}11.3使用LINQtoSQL的对象和方法11.3.1返回数据表中的全部记录(select语句)4.遍历某字段的全部值下列代码表示了使用foreach循环遍历studentID字段,并将该字段的所有值添加到列表框控件ListBox1中的方法。protectedvoidButton1_Click(objectsender,EventArgse){

DataClassesDataContext

db=newDataClassesDataContext();

foreach(varsindb.StudentInfo){

ListBox1.Items.Add(s.StudentID);}}11.3使用LINQtoSQL的对象和方法11.3.2返回数据表中符合条件的部分记录(Where语句)使用Where语句下列语句(斜体字部分)通过Where语句设置了条件表达式,筛选出专业为“软件技术”,且“1991-02-01”前出生的所有记录。protectedvoidLinqWhere_Click(objectsender,EventArgse){

DataClassesDataContext

db=newDataClassesDataContext();

var

StuInfo=fromStuTableindb.StudentInfo

whereStuTable.Specialty=="软件技术"&&

StuTable.DateOfBirth<DateTime.Parse("1991-02-01")selectStuTable;GridView1.DataSource=StuInfo;GridView1.DataBind();}11.3使用LINQtoSQL的对象和方法11.3.2返回数据表中符合条件的部分记录(Where语句)2.使用Where()方法通常将上面代码的编写方式称为“语句方式”,将使用Lambda表达式的编写方式称为“方法方式”,实现程序功能的方法方式代码如下所示。代码中斜体字部分使用db.StudentInfo对象的Where()方法,并使用Lambda表达式表示了查询条件。程序的返回结果与上例完全相同。protectedvoidLinqWhere_Click(objectsender,EventArgse){

DataClassesDataContext

db=newDataClassesDataContext();

var

StuInfo=db.StudentInfo.Where(m=>m.Specialty=="软件技术"&&

m.DateOfBirth<DateTime.Parse("1991-02-01"));GridView1.DataSource=StuInfo;GridView1.DataBind();}11.3使用LINQtoSQL的对象和方法11.3.2返回数据表中符合条件的部分记录(Where语句)3.Single()和SingleOrDefault()方法如果希望从数据库中返回单独的一条记录,可使用Single()或SingleOrDefault()方法。其中:1)Single()方法:用于返回符合条件的单独一条记录,在没有找到任何匹配记录时将抛出一个异常。2)SingleOrDefault()方法:用于返回符合条件的单独一条记录,在没有找到任何匹配的记录时将返回null。11.3使用LINQtoSQL的对象和方法11.3.2返回数据表中符合条件的部分记录(Where语句)4.返回字段值包含特定字符串的记录可以在LINQtoSQL查询中使用的字符串方法有许多,如:Length、Substring、Contains、StartsWith、EndsWith、IndexOf等等。11.3使用LINQtoSQL的对象和方法11.3.3返回数据集合的排序(OrderBy方法)使用OrdreBy()方法或OrderByDescending()方法,可以实现返回记录的升序或降序排列。protectedvoidLinqOrderBy_Click(objectsender,EventArgse){

DataClassesDataContext

db=new

DataClassesDataContext();GridView1.DataSource=db.StudentInfo.OrderBy(m=>m.DateOfBirth);GridView1.DataBind();}11.3使用LINQtoSQL的对象和方法11.3.4连接不同数据表(Join语句)如果希望将数据库中不同表的字段组成一个来自多个表的查询返回集合,需要使用LINQtoSQL提供的Join语句。

参阅源代码:ex11-311.3使用LINQtoSQL的对象和方法11.3.5插入新记录使用LINQtoSQL向数据表中插入一条记录的方法十分简单,在创建了DataContext类和数据表实体对象后,只要创建一个数据表对象的实例,并为该实例的各个字段赋值,最后调用数据表对象的InsertOnSubmit()方法,将数据表对象实例添加到表,调用DataContext类对象的SubmitChanges()更新数据库即可。11.3使用LINQtoSQL的对象和方法11.3.6修改记录使用LINQtoSQL技术修改数据库记录的操作与添加新记录十分相似,在创建了DataContext类和数据表实体对象后,首先需要查询到希望修改的记录,而后为查询结果对象中的各个字段赋以新值,最后调用DataContext类对象的SubmitChanges()方法即可。11.3使用LINQtoSQL的对象和方法11.3.7删除记录使用LINQtoSQL技术删除数据库记录的操作与更新记录十分相似,在创建了DataContext类和数据表实体对象后,首先需要查询到希望修改的记录,而后调用数据表实体对象的DeleteOnSubmit()方法,最后调用DataContext类对象的SubmitChanges()方法即可。11.3使用LINQtoSQL的对象和方法11.3.8使用LINQtoSQL直接执行SQL语句

1.GetCommand()方法

2.ExecuteCommand()方法

DataContext类提供的ExecuteCommand()方法可用于直接对数据库执行一个没有返回值的SQL命令。注意,在书写SQL语句时表名称、字段名需要用方括号“[]”将其括起来。

3.ExecuteQuery()方法

DataContext类提供的ExecuteQuery()方法用于直接执行一个SQL查询,该方法返回一个IEnumerable<T>类型的泛型集合。11.4实训使用LINQtoSQL操作数据库11.4.1实训目的①进一步理解创建和使用DataContext类的基本方法。②掌握常用LINQtoSQL语句和方法,掌握通过LINQtoSQL语句或方法实现常规数据库操作的基本步骤。11.4.2实训要求使用LINQtoSQL语句和方法,配合GridView、LinqDataSource等控件,设计一个能对SQLServer数据库StudentDB中StudentInfo表进行查询、添加、修改或删除操作的ASP.NET应用程序。第12章ASP.NETMVC本章讲述的主要内容12.1ASP.NETMVC概述12.2ASP.NETMVC路由12.3ASP.NETMVC控制器12.4ASP.NETMVC视图和模型12.5实训设计一个用户管理程序

12.1ASP.NETMVC概述ASP.NETMVC是Microsoft推出的新型ASP.NET应用程序开发模式,MVC是模型(Model)、视图(View)和控制器(Controller)3个单词的缩写,它意味着这种开发模式将一个应用程序分为模型、视图和控制器3个组成部分。VisualStudio2015中内置的MVC版本为ASP.NETMVC5。12.1.1MVC的构成1.模型(Model)2.视图(View)3.控制器(Controller)12.1ASP.NETMVC概述12.1.1MVC的构成4.MVC的工作原理12.1ASP.NETMVC概述12.1.2Razor语法

ASP.NETMVC5默认使用Razor语法来设计动态网页。由于Razor是通过System.Web.Mvc下的RazorViewEngine类来实现的,所以也称为“Razor视图引擎”。在ASP.NETMVC5项目中使用的Razor视图引擎为基于Razor语法的Web网页第3版(也称为ASP.NETWebPages3)。Razor的特点①利用Razor可以在视图(.cshtml)文件中混合使用C#和HTML、JavaScript、jQuery等服务器端和客户端语言。②Razor有非常简洁的语法格式。在视图文件中只需要使用一个“@”符号就可以表示C#语句块或内联表达式。③Razor能自动对网页中输入的字符串进行HTML编码,可以有效地防范客户端脚本攻击。12.1ASP.NETMVC概述12.1.2Razor语法2.使用Razor

(1)使用@标记@标记表示其后跟随的是C#代码的一个内联表达式、单行语句或一个语句块。(2)使用@Html.Raw()方法对于HTML代码中出现的@符号本身或双引号、单引号等特殊符号,可以通过@Html.Raw()方法进行转义。12.1ASP.NETMVC概述12.1.3创建MVC应用程序参阅源代码:ex12-112.1.4ASP.NETMVC项目的组成1.应用程序信息文件①Properties文件夹:项目属性文件夹,其中包含有一个名为“AssemblyInfo.cs”,用于保存程序集信息(如,名称、版本、版权等)的文件。该文件由项目属性窗口中各选项生成,一般不需要手工编辑。②引用文件夹(bin):用于存放系统运行所必须的外部引用(各类.dll文件)。12.1ASP.NETMVC概述12.1.4ASP.NETMVC项目的组成2.项目文件夹

App_Data文件夹:用于存放项目中使用的数据文件或数据库文件,作用及功能与WebForms项目中App_Data文件夹相同。

App_Start文件夹:用于存放配置类的代码文件,默认包含有一个名为“RouteConfig.cs”的路由配置文件,也就是ASP.NETMVC项目的“路由表”。

Controllers文件夹:用于存放项目中所有控制器文件的文件夹。

Models文件夹:用于存放项目中所有模型文件的文件夹。

Views文件夹:用于存放项目中所有视图的文件夹。每个视图以对应控制器名为子文件夹名,视图文件的扩展名为.cshtml。12.1ASP.NETMVC概述12.1.4ASP.NETMVC项目的组成3.配置文件①ApplicationInsights.config:监视配置文件,用于设置如何监视应用程序的运行情况。②Global.asax:全局配置文件,用于设置全局URL路由的默认值,在应用程序启动时可通过该文件执行一些特殊操作。③packages.config:项目中附加的软件包配置文件,由系统自动生成和管理,一般不需要程序员编写和修改。④Web.config:XML格式的网站或文件夹的配置文件。其作用与WebForms项目中的web.config文件相同。12.2ASP.NETMVC路由MVC路由是指用来将用户请求与控制器对应的处理方法进行关联的设置,它也是除了模型、视图和控制器外最为重要的一个概念,它分为入站和出站路由两种类型。在前面几章介绍过的WebForms开发模式中所有的用户请求都会指向一个物理存在的文件(如.aspx、html等),而在MVC中用户请求则一律指向控制器中某个操作方法,并由该方法决定下一步的操作(打开视图、获取数据等)。12.2.1MVC路由1.注册路由所谓“注册路由”就是通过存放在App_Start文件夹下的RouteConfig.cs所表述的RouteConfig类中定义的RegisterRoutes()方法,将URL、控制器及对应的Action关联起来12.2ASP.NETMVC路由12.2.1MVC路由2.从URL向控制器传递数据MVC程序中可以通过Controller类的RouteData属性或查询字符串Request.QueryString[]进行页面间的数据传递。

参阅源代码:ex12-212.2ASP.NETMVC路由12.2.2通过路由实现超链接和页面跳转1.通过路由创建超链接在ASP.NETMVC项目中如果希望请求一个特殊的路由,可以使用HtmlHelper类中的RouteLink()方法,该方法用于动态的在页面中生成一个超链接。2.通过路由实现页面跳转在ASP.NETMVC项目中仍然可以使用Response.Redirect()方法实现页面跳转。而更常用的方式是利用事先定义好的路由来实现页面间的跳转。12.3ASP.NETMVC控制器控制器继承于Controller类,Controller又继承于ControllerBase类。但由于ControllerBase类中包含的成员数量较少,而Controller却包含有非常丰富的成员,所以Controller类是控制器的默认实现,它负责以下几个处理阶段的工作:①查找要调用的Action方法,并验证该方法是否可以被调用。②获取要执行的Action方法的参数。③处理在执行操作期间可能发生的错误。④提供呈现视图的默认引擎。在一个控制器中可以定义一个或多个Action方法,一个Action方法可以也控制一个或多个视图。12.3ASP.NETMVC控制器12.3.1控制器的常用属性和方法1.ViewData和ViewBag属性

ViewData属性是一个ViewDataDictionary对象,是一个不区分大小写的由“键/值”(Key/Value)对组成的字典类型集合,也就是说ViewData中的每一个元素都由“键”和“值”一对数据组成。

ViewBag属性时ViewData的另一种表示形式,也是一种由“键/值”(Key/Value)对组成的字典类型集合。该属性返回的是一种动态数据类型(Dynamic),这种数据类型只有在进行编译时才会被系统处理。12.3ASP.NETMVC控制器12.3.1控制器的常用属性和方法2.TempData属性

TempData属性的作用与ViewData和ViewBag相似,也用来向视图传递数据。不同的是它可以实现在不同视图间进行数据传递。此外,TempData是一个临时的键值对数据集合,只能在当前请求时读取该对象,再次请求时其中的所有数据都会自动变成null。从MVC内部的实现来看,TempData实际上是通过Session来实现的,这样既可以区分不同的访问者,又能及时清除这些暂存的数据。

TempData的另一个典型用法是,在数据重定向到另一个Action方法之前先通过TempData存储要传递的数据,而后再从另一个Action中得到这些数据。12.3ASP.NETMVC控制器12.3.1控制器的常用属性和方法3.Server属性控制器中,利用Controller类公开的Server属性可以获取ControllerBase类中定义的HttpServerUtility对象,然后通过该对象在服务器上执行一些特定的操作。

例如,对HTML字符串和URL字符串进行编码和解码、将虚拟路径转换成物理路径等。4.Request和Response属性在Action方法或视图的C#代码块中,通过Request属性可以获取HttpRequestBase对象,从而进一步调用该对象提供的一些属性和方法。12.3ASP.NETMVC控制器12.3.2控制器的Action方法1.Action方法参数的来源和映射ASP.NETMVC框架可以将Action方法中的参数值自动映射到Action方法。在默认情况下,若Action方法带有参数,则ASP.NETMVC会检查是否存在同名参数,若有则自动传递给Action方法,无需再编写从请求中获取参数的代码。2.ActionResult的返回值类型

ActionResult类使所有操作结果的基础,多数Action方法会返回从该类派生的子类实例。例如,常见的操作是调用View()方法返回一个从ActionResult类派生的ViewResult类的实例。当然也可以根据实

温馨提示

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

评论

0/150

提交评论