使用LINQ技术操作数据库.doc_第1页
使用LINQ技术操作数据库.doc_第2页
使用LINQ技术操作数据库.doc_第3页
使用LINQ技术操作数据库.doc_第4页
使用LINQ技术操作数据库.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

学习单元5 使用LINQ技术操作数据库在安装VS2008的时候,宣传广告中不断地显示VS2008的新特性,其中重点就有LINQ。VS作为一个全球有影响力的开发软件,自VS2008开始就把目光重点投给LINQ,这一定有它的地位和意义。在第三学习单元和第四学习单元的学习中我们掌握了用数据源控件和ADO.NET技术操作数据库,实现了对数据库数据的编辑。虽然数据源控件以及传统的ADO.NET提供了大量的读取、查询、检索和编辑数据库中数据的方法,然而,有时这些方法显得比较繁琐。开发人员需要编程查询或操作数据库的每个步骤,如获取连接字符串、创建数据库的连接对象、打开数据的连接、执行查询或操作数据库的命令等。LINQ引入了标准的、易于学习的查询和更新数据的模式,可以对其技术进行扩展以支持几乎任何类型的数据存储,这使得它在对象领域和数据领域之间建立了一座桥梁。图5-1给出了LINQ框架的基本架构,LINQ主要由3部分组成:LINQ to ADO.NET 、LINQ to Objects和LINQ to XML。其中LINQ to ADO.NET又分成为了两个组成部分:LINQ to SQL和LINQ to DataSet。本学习单元将通过LINQ to SQL来认识LINQ技术,其它组成部分读者可以借助其它资料进行学习。C#VB.NET语言集成查询(LINQ)Linq to ObjectLinq to XML支持LINQ的数据源LINQ to ADO.NET对象数据库XMLLinq to DataSetLinq to SQL图5-1 LINQ基本架构其它5.1 任务1:使用LINQ to SQL操作数据库 5.1.1 任务场景“588乐购网”为了向广大顾客更好地展示商品,决定在网站中添加商品展示板块。同时,为编辑这些商品信息则必须在网站的后台添加数据处理的页面。商品展示模块的功能是通过图文并茂的方式展示商品的品名、型号、参数和图片等信息。如图5-2所示的“588乐购网”的首页,在页面的左侧显示商品品牌导航条,右侧则显示最新上架商品的图片缩略图及其品名和价格,点击商品的图片,则按图5-3所示的界面显示商品的详细信息。图5-2 网站首页图5-3 商品详细信息页面网站的后台数据管理也是一个网站必不可少的内容。在后台数据管理页面中可以进行包括用户信息、商品信息和订单信息等等内容的处理。如图5-4商品信息添加模块的页面。图5-4 添加手机页面5.1.2 学习引导在.NET Framework 3.5的众多新特性中,LINQ to SQL是最重要的一个,它的出现意味着自SQL诞生以来,应用程序与数据库的结合方式上最重要的一次变革。开发人员可以使用LINQ to SQL对数据库中的数据进行查询、更新、插入和删除等操作。目前,可以对Microsoft SQL Server 2000/2005(包括使用Express版)使用LINQ to SQL。其他数据库,如Oracle、DB2和Access等,目前还没有得到支持,但也许将来会得到支持。LINQ to SQL最重要的就是为关系数据库创建一个对象模型,然后将该对象模型映射到SQL Server数据库中的相应的对象(如表、列、存储过程等)。例如,如果LINQ to SQL映射到数据库中的表,则这些LINQ to SQL类称为“实体类”。该类中的属性分别映射到数据库中的相应的列。 在理解了映射关系的基础上,接下来就是如何实现这种映射关系。这里必不可少的就是掌握LINQ查询语句,它实现了对数据库数据的查询和修改。当然,被查询的数据也可以是XML(LINQ to XML)和对象(LINQ to Objects)。5.1.3相关知识与技术一 LINQ查询表达式语法基础C# 3.0在C# 1.0和 C# 2.0的基础上引入了新的语言机制,如隐型局部变量、对象初始化程序、查询表达式和Lambda表达式等。这些新的机制为LINQ提供了语法支持。接下来,我们通过一个简单的例子来理解LINQ查询表达式语法。尽管LINQ不仅可用来访问关系数据库,而且也能访问数据集或XML等数据类型,但这里为了理解LINQ查询表达式,我们用一个SQL语句访问数据库来比较说明。下面的SQL语句是基于NorthWind数据库用来查询没有住在Berlin的顾客的名单:SELECT c.CompanyName, c.ContactName, c.CityFROM Customers cWHERE c.City != BerlinORDER BY c.ContactName现在来看看用LINQ表达式做同样的事情,解剖并理解清除其中的细节,有两种查询语法:查询表达式和方法查询。目前,暂时先考虑查询表达式,下面的查询表达式将从GetCustomers()返回的IEnumerable类型结果,找出那些没有居住在Berlin的顾客。var customerNotInBerlin = from c in GetCustomers() where c.City != Berlin orderby c.ContactName select c;表5-1概述了LINQ一些常用的表达式:表5-1 LINQ查询表达式子句列表操作符意义var =使用类型推理来赋值from in 从一个中取出一个子集作为一个 where 从数据源中取出一个子集的约束条件 select 指定查询结果的类型和表现形式. group对查询结果进行分组join 选择多个数据源进行关联查询orderby, ascending, descending 对查询结果进行排序,可以是“升序”、“降序”LINQ查询表达式必须以from子句开头,并且必须以select 或group子句结束。在第一个from子句和最后一个select或group子句之间,查询表达式可以包含一个或多个where、orderby、group、join,甚至from子句。1. from、where和select查询子句LINQ查询表达式必须包含from子句,而且要以from子句开头,嵌套查询其子查询表达式也必须以from开头。from子句指定查询操作的数据源和范围变量。where子句指定筛选元素的逻辑条件,一个查询表达式可以不包含where子句,也可以包含1个或多个where子句。select子句指定了查询结果的类型和表现形式。LINQ查询表达式要么以select子句结束,要么以group子句结束。下面的实例说明了一个简单的查询操作。代码使用GetMobiles( )方法获得Mobile表的内容。之后,使用一个LINQ查询表达式(利用了from、where和select关键字)获得where筛选后的数据集作为GridView1的数据源。private void ShowData ( ) var mobiles = GetMobiles(); var query=from m in mobiles where m.MbID5 select query GridView1.DataSource= query; GridView1.DataBind(); 注意,from子句指定的数据源的类型必须是IEnumerable(可枚举)、IEnumerable或前两者的派生类型。在下面的例子中,我们不是简单的选择query,而是明确定义字段的名称,定义一个新的投射,指定在结果集中的对象。例如,要给MbID和MbName指定更明确的名称,以完整地描述他们的内容。private void ShowData ( ) var mobiles = GetMobiles(); var query=from m in mobiles select new mobileid = m.MbID , mobilename = m.MbName; GridView1.DataSource= query; GridView1.DataBind(); 2. group子句group子句对查询结果进行分组,并返回元素类型为IGrouping的对象序列。下面的例子中,使用group关键字按类型组合Mobile类别数据,关键字into提供了一个临时标识符,充当group子句的结果的引用。另外,因为group操作不会导致任何结果,所以查询仍使用前面讨论的技术创建一个定制的查询投射。private void ShowData ( ) var mobiles = GetMobiles (); var query = from m in mobiles group m by m.MbTypeID into g select new手机类型标记=g.Key, 数量=g.Count() ; GridView1.DataSource= query; GridView1.DataBind(); 3. orderby 子句orderby 子句可以多查询结果进行排序。排序的方式可以是“升序”或“降序”,默认的排序方式为“升序”。private void ShowData ( ) var mobiles = GetMobiles(); var query = from m in mobiles orderby m.MbID descending select new 手机标记= m.MbID , 手机名称 = m.MbName; GridView1.DataSource= query; GridView1.DataBind(); 二 通过LINQ插入、更新和删除数据LINQ to SQL最重要的功能就是查询和操作SQL Server数据库中的数据。通过它可以很容易的查询SQL Server数据库中的数据,而且也可以通过InsertOnSubmit()、DeleteOnSubmit()等方法实现对数据库的插入数据和删除数据等操作。1. 创建LINQ to SQL实体在Visual Studio中包含了一个基本的Object Relation映射器,它可以快速地为SQL Server数据库创建一个对象模型,并将这些对象模型映射到SQL Server数据库中相应的对象(如表、列、存储过程和函数等)。SQL Server数据库中的表被映射为LINQ to SQL类,我们称为“实体类”;数据库中的列被映射为实体类中的属性或字段;存储过程或函数被映射为实体类中的方法。LINQ to SQL对象模型和SQL Server数据中的对象的映射关系如表5-2所示。表5-2 不同数据提供程序对应的ADO.NET对象LINQ to SQL对象模型的基本元素SQL Server数据库中的对象实体类表属性(或字段)列关联外键关系方法存储过程或函数实体是描述数据库表(或视图)的类,通过它可以实现对数据库的操作,接下来我们来学习如何通过Visual Studio 2008的Object Relational Designer创建实体类。(1)创建DBML文件在【解决方案资源管理器】中右击解决方案名称,然后选择【添加新项】命令,如图5-5所示:图5-5 添加新项在弹出的【添加新项】对话框中选择【LINQ to SQL类】选项,并在【名称】对话框中输入类文件名,如图5-6所示:图5-6 添加实体类DataClasses.dbml左击【添加】按钮后,会出现如图5-7的对话框,选择【是】按钮,将LINQ to SQL类放在App_Code文件中:图5-7 是否将实体类添加入App_Code文件夹对话框选择【是】后,将在App_Code文件夹中生成一个DataClasses.dbml文件,并在IDE视图窗口中打开了这个文件。如图5-8所示,I区是用来创建实体类的,II区是用来创建方法的。图5-8 实体类的IDE视图窗口(2)创建“数据上下文类”具体操作为:在【服务器资源管理器】面板中选择DataBase数据库中的Mbtype表,然后将其拖放到图5-8的【I】区视图面板中,如图5-9。保存DataClasses.dbml文件后,该文件将为Mbtype表创建一个名为Mbtype的类。类的内容保存在DataClasses.designer.cs代码窗口中,如图5-10。而以后没改变一次dbml文件中的内容,必须在重新保存一次.dbml文件,这时DataClasses.designer.cs中的内容也将更新。图5-9 拖放数据库表进对象关系设计器示意图图5-10 数据上下文类的代码窗口(3)创建数据库的数据上下文方法如果开发人员需要使用数据库中的存储过程或函数,则需要把存储过程或函数也添加到DataClasses.dbml文件中。具体操作为:在【服务器资源管理器】面板中选择数据库中的存储过程或函数,并将它们拖放到DataClasses.dbml文件的视图面板图5-8【II】区中。保存DataClasses.dbml文件之后,该文件将为每一个存储过程和函数创建一个相应的方法。2. 查询数据库中的数据使用LINQ to SQL可以轻松查询数据库中的数据,下面我们通过LINQ to SQL来查询DataBase数据库中的Mbtype表中的数据,并通过Repeater控件显示在页面中。具体步骤如下:(1) 创建DataClassesDataContext类的实例db。(2) 使用LINQ查询表达式查询Mbtype表中的数据,并将查询的结果保存为result变量。(3) 把result变量作为Repeater控件rptData的数据源,并绑定该控件的数据来显示查询的结果。private void showData() /创建DataBase数据库的上下文实例。 DataClassesDataContext db = new DataClassesDataContext(ConfigurationManager.ConnectionStringsMG_mobileConnectionString.ConnectionString); var result = from p in db.Mbtype select p; rptData.DataSource = result; rptData.DataBind(); 3. 修改数据库中的数据具体步骤如下:(1) 使用LINQ查寻查找被修改的记录。(2) 赋予记录新的值。(3) 调用SubMitChanges()方法将上述修改提交到数据库,并完成修改操作。private void UpdateDataWithLINQ() /创建LinqDB数据库的数据上下文的实例 tempDataContext db = new tempDataContext( );/查询被修改的数据var result = from r in db.Mobile where r.MbID = 2 select r;/修改数据foreach (Mobile r in result) r.MbName = 123;/将修改操作提交到数据库中db.SubmitChanges();4. 插入数据创建了DataContext类对象之后,就能够使用DataContext的方法进行数据插入、更新和删除操作。相比ADO.NET,使用DataContext对象进行数据库操作更加方便和简单。使用LINQ to SQL类进行数据插入的操作步骤如下。(1) 创建DataClassesDataContext类的实例db。(2) 声明实体类对象info,并设置其相应的属性值,为实体属性赋值。(3) 调用InsertOnSubmit()方法将实体类对象info添加到db实例的Mobile表中。(4) 调用SubmitChanges()方法将实体类中的数据添加到数据库中,实现修改数据的功能。private void AddDataWithLINQ() /创建LinqDB数据库的数据上下文的实例 tempDataContext db = new tempDataContext( ); Mobile mb = new Mobile();/ 创建一个实体 mb.MbName = “apple”;db.Mobile.InsertOnSubmit( mb ); / 添加到数据库中db.SubmitChanges();/将修改操作提交到数据库中5. 删除数据库中的数据使用LINQ能够快速的删除行,删除行的基本步骤如下:(1) 创建DataClassesDataContext类的实例db。(2) 使用LINQ查询将要删除的数据,将查询结果保存到result变量中。(3) 使用DeleteAllOnSubmit()方法删除result变量中的所有记录。(4) 调用SubmitChanges()方法将实体类中的数据添加到数据库中,实现修改数据的功能。private void DeleteDataWithLINQ() /创建LinqDB数据库的数据上下文的实例 tempDataContext db = new tempDataContext( ); / 查询被删除的数据 var result = from r in db.Mobile where r.MbID=2 select r; / 删除数据,并提交到数据库中 db.Mobile. DeleteAllOnSubmit ( result );/将修改操作提交到数据库中db.SubmitChanges();5.1.4任务的设计与实现一 相关数据库设置与定义根据任务场景,该功能模块可设置保存商品信息的数据表Mobile和保存商品品牌的数据表mbtype,所在的数据库文件为Database.mdf。mbtype和Mobile数据表定义分别如表5-3和表5-4所示。表5-3 mbtype数据表定义字段名数据定义允许为空字段描述TypeIDint否类别编号,主键MbTypeNamenvarchar(50)否类别名称MbTypePicnvarchar(50)否类别图片存放路径表5-4 Mobile数据表表定义字段名数据定义允许为空字段描述MbIdint否商品编号,自动编号,主键MbNamenvarchar(50)否商品名称MbTypeIdint否类别编号Pricemoney否商品价格Picturenvarchar(50)否商品图片AddedTimedatetime否商品上架时间Stockint否商品库存二 功能的设计与实现1.设计前准备在VS2008中新建网站,并在站点App_Data目录下创建数据库Database.mdf,同时在该数据库中创建如表5-3和表5-4所示的数据表。2.任务的功能设计根据学习任务学习场景描述,主要包含三个页面:网站首页、商品详细信息页面和网站后台商品添加页面。(1) 网站首页:将网站的首页分成上中下的结构,最新上架商品的信息放在中间区域。(2) 商品详细信息页面:每一款商品详细信息展示包含:一张商品图片、商品名称、商品编号、商品价格,并在该页面中添加购买按钮和购买数量。(3) 商品添加页面:该页面主用用来提交一款商品的信息。在提交信息之前能够预览该商品的缩略图。3.任务的功能实现(1) 首页模板页页面布局设计为使网站有一个统一的风格,在网站根目录下按上、中、下的网页布局创建一个模板页MasterPage.master,模板页布局如图5-11所示。图5-11 首页模板页布局模板页的页头区域包含了页面标题、网站LOGO、登录区、搜索区等;页脚区域包含了一些扩展链接。模板页的左半部分为商品品牌导航区域,它采用商品品牌的缩略图来作导航按钮。这里用一个名为dlistType的DataList控件来显示这些商品品牌数据,编辑dlistType控件模板,在其中放置一个名为ibtType的ImageButton控件和一个名为lbTypeId的Label控件。显示商品品牌导航的DataList控件及其子控件相关属性设置如表5-5所示。表5-5 显示商品品牌导航的DataList控件及其子控件相关属性设置dlistTypeDataList控件,绑定到Mbtype数据表,以便其ItemTemplate视图子控件ibtType显示商品品牌缩略图,子控件lbTypeId绑定品牌Id。子控件功能属性绑定表达式续表5-5iimagebtnTypeImageButton控件,用于显示商品缩略图导航按钮,通过查询字符串将当前商品品牌的MbTypeID传递到目标页面ProductList.aspxImageUrlEval(MbTypePic)CommandNameimagebuttonlbTypeIdLabel控件,主要用于获取商品品牌的ID,可作为按类别显示手机信息时的条件。TextEval(TypeId)Visiblefalse导航实现获取数据库中mbtype表作为控件dlistType的数据源。这需要在网站中新建一个LINQ to SQL实体类DataClasses.dbml,并将mbtype表拖进IDE窗口后保存该dbml文件。给dlistType控件指定数据源。在MasterPage.master.cs文件中添加获取数据源的方法ShowLeftType()。public void ShowLeftType() DataClassesDataContext dc = new DataClassesDataContext(); var results = from t in dc.mbtype select t; dlistType.DataSource = results; dlistType.DataBind(); (2) 网站首页网站首页应直观地给顾客以网上商品琳琅满目的感觉以及浏览方便。还应让顾客知道网站最新的信息,特色的商品信息推荐。因此,在本学习任务中,我们设计了在网站的首页中显示最新上架的商品信息,这些信息通过图文并茂的方式来展现。最新上架信息显示设计最新上架商品信息的显示也借助DataList控件来显示。在网站首页Default.aspx(属于模板页MasterPage.master的内容页)中添加名为dlistLatest的DataList控件。编辑dlistLatest模板,在ItemTemplate模板中添加能显示每一款商品缩略图、商品名和价格等信息的控件。商品缩略图设计成一个名为imagebtn的ImageButton控件,它可以作为显示商品详细信息的页面导航按钮;商品名和价格分别用名为lbName和lbPrice的Label控件来显示。ItemTemplate模板的布局如图5-12所示图5-12 商品展示模板布局显示最新上架商品信息的DataList控件及其子控件相关属性设置如表5-6所示。表5-6 显示最新上架商品信息DataList控件及其子控件相关属性设置dlistLatestDataList控件,绑定到Mobile数据表,以便其ItemTemplate视图子控件imagebtn显示商品缩略图,子控件lbName绑定商品名,子控件lbPrice绑定商品价格。子控件功能属性绑定表达式imagebtnImageButton控件,用于显示商品缩略图导航按钮,通过查询字符串将当前商品品牌的MbTypeID传递到目标页面ProductList.aspxImageUrlEval(Picture)PostBackUrlEval(MbId,/MobileDetails.aspx?MbId=0)lbNameLabel控件,用于显示商品名。TextEval(MbName)lbPriceLabel控件,用于显示商品价格。TextEval(Price,0:c)数据显示将Mobile表拖入LINQ to SQL实体类DataClasses.dbml的IDE窗口并保存。在Default.aspx.cs文件中添加显示最新上架信息的方法ShowLatest(),public void ShowLatest() DataClassesDataContext dc = new DataClassesDataContext(); var results = from m in dc.Mobile orderby m.AddedTime descending select m; var query = results.Take(8); / 取返回结果的前8条记录 dlistLatest.DataSource = query; dlistLatest.DataBind(); (3) 商品详细信息页面当单击首页中的商品缩略图时,将打开一个商品详细信息页面MobileDetails.aspx用来显示商品的更详细信息。商品详细信息页面也是MasterPage.page的内容页,在该页面中用名为dlistDetails的DataList控件来显示商品的详细信息。编辑dlistDetails模板,在ItemTemplate模板中添加能显示每一款商品详细信息的子控件。商品缩略图设计成一个名为imMb的Image控件;商品名、价格和库存信息分别用名为lbName、lbPrice和lbStock的Label控件来显示。另外,在本页面中还添加了名为quantity的TextBox控件作为用户购买数量的输入框,以及一个名为ibtnBuy的ImageButton控件的购买按钮,用来将商品添加入购物车。ItemTemplate模板的布局如图5-13所示图5-13 商品详细信息模板布局示意图显示商品详细信息的DataList控件及其子控件相关属性设置如表5-7所示。表5-7 显示最新上架商品信息DataList控件及其子控件相关属性设置dlistDetailsDataList控件,绑定到Mobile数据表。子控件功能属性绑定表达式lbNameLabel控件,用于显示商品名称TextEval(MbName)lbIdLabel控件,用于显示商品编号。TextEval(MbId)lbPriceLabel控件,用于显示商品价格。TextEval(Price,0:c)lbStockLabel控件,用于显示商品库存。TextEval(Stock)quantityTextBox控件,用户输入用户购买数量ibtnBuyImageButton控件,添加商品进购物车的触发按钮CommandNamebuy当单击添加到购物车按钮时,触发dlistDetails控件ItemCommand事件dlistDetails_ItemCommand,方法如下:protected void dlistDetails_ItemCommand(object source, DataListCommandEventArgs e) if (e.CommandName = buy) / 判断用户是否登录,如果已登录则跳转至购物车页面,/ 若未登录则跳转至用户登录页面。 通过设置dlistDetails控件中的子控件的CommandName属性,可以用来判断用户触发了哪个子控件的事件,进而执行该事件。购物车的实现在本学习单元中并不体现,读者可根据学习需要查阅相关材料。(4) 新增商品信息页面新增手机页面用一个Table来布局。Table中包含的控件属性设置如表5-8所示。表5-8 新增手机页面相关控件属性设置控件功能属性/事件值tbNameTextBox控件,用于输入手机名称ddlTypeDropDownList控件,作为手机品牌的输入功能。tbPriceTextBox控件,用于输入手机价格fileuploadFileUpload控件,用于上传手机图片onchangepreviewImage()picImage控件,该控件为HTML控件,用来显示图片预览图。tbStockTextBox控件,用于输入手机库存CommandNamebuyREVPriceRegularExpressionValidator控件,验证用户输入价格格式ControlToValidatetbPriceErrorMessage(请输入一个小数位为2的正实数)ValidationExpression0-9+(.0-92)?$REVStockRegularExpressionValidator控件,验证用户输入库存格式ControlToValidatetbStockErrorMessage(请输入一个非负整数)ValidationExpressiond+$ibtnAddIImageButton控件,触发手机数据插入事件ClickibtnAdd_Click()添加手机信息,手机图片的处理分为两个步骤完成:将手机图片上传至服务器存放图片的文件夹images中,同时将存放该手机图片的相对路径和图片文件名提交服务器保存,这两个过程在名为ibtnAdd的ImageButton控件Click事件中完成,代码如下:protected void ibtnAdd_Click(object sender, ImageClickEventArgs e) DataClassesDataContext dc = new DataClassesDataContext(); Mobile mb = new Mobile(); mb.MbName = tbName.Text; var value = from u in dc.mbtype where u.MbTypeName = ddlType.SelectedItem.ToString() select u; foreach (mbtype u in value) mb.MbTypeId = u.TypeId; mb.AddedTime = DateTime.Now; mb.Price = Convert.ToDecimal(tbPrice.Text); mb.Stock = int.Parse(tbStock.Text.Trim(); /获取手机图片相对路径及文件名 mb.Picture = /images/mobile/ + fileupload.FileName; /将手机图片保存至网站服务器中的相关位置 fileupload.SaveAs(Server.MapPath(/images/mobile/ + fileupload.FileName); dc.Mobile.InsertOnSubmit(mb); dc.SubmitChanges(); 在手机添加页面中增加一个预览手机图片的功能,该功能只需要在客户端处理,因此图片预览的处理的方法是在页面中增加一段代码,如下所示: /如果用户选择了图片,则显示图片的预览效果 function previewImage() var x = document.getElementById()var y = document.getElementById(pic); if(!x | !x.value | !y)/如果没有选择上传文件 return; var patn = /.jpg$|.jpeg$|.gif$/i; if(patn.test(x.value)/如果上传文件的后缀是.jpg或.jpeg或.gif y.src = file:/localhost/ + x.value; y.style.display=block; else alert(您选择的似乎不是图像文件。); 至此,本学习任务描述的功能需求实现基本完成。5.2 任务2:使用LinqDataSource控件操作数据库5.2.1 任务场景在网站的首页中给出了手机品牌缩略图,当顾客单击该缩略图时将显示网站中隶属于该品牌的所有商品信息,如图5-14所示:图5-14 按品牌显示商品信息页5.2.2 学习引导在Asp.Net 3.5中,提供了一个全面支持LINQ的数据源控件,通过使用 LinqDataSource 控件,无需编写 Select、Update、Insert 或 Delete 语句即可执行对数据库的操作。接下来,我们将介绍如何使用LinqDataSource控件及其在设计期间的配置选项。在使用LinqDataSource控件操作数据库时,我们按下面的步骤来完成:1. 创建数据库表和数据表。注意:在创建数据表时一定要给该表设置主键。2. 创建表示数据库实体的类。也即创建一个dbml文件。3. 创建和配置 LinqDataSource 控件4. 添加显示数据的控件5. 配置LinqDataSource,使用户能够更新、插入和删除数据5.2.3相关知识与技术和其他数据源控件一样,LinqDataSource控件也是通过设置该控件的属性转换为可以再目标数据对象上操作的查询,也就是转换为有效地LINQ查询。把该控件拖放到Visual Studio的设计界面上,然后选【择配置数据源】就可以使用智能标记配置控件了。图5-15显示了配置向导的初始页面。图5-15 配置LinqDataSource初始页面在这个页面中,我们可以选择要做数据源的上下文对象。默认情况下,向导显示由LINQ to SQL创建的数据上下文类。也允许选择其他上下文对象。选择上下文对象后,可以选择上下文对象中的指定表或属性,以返回要绑定的数据。如图5-16,【表】项的下拉列表包含了改上下文对象中的所有数据表。选择相应的表后单击【完成】按钮,完成向导。程序清单列出了LinqDataSource配置向导生成的标记。图5-16指定LinqDataSource数据来源表页面当然,在图5-17中,配置向导还可以通过设置【Select(S)】项来返回相应字段的结果集。接下来,LinqDataSource就可以作为数据源绑定到数据控件(如GridView或DataList等)中上了。另外,设置完数据源后,我们还可以通过LinqDataSource控件的属性窗口(设置EnableInsert、EnableUpdate和EnableDelete属性值为false或true)或者下图来设置该控件是否可以执行插入、更新和删除操作。这个设置将可以让我们无需编写任何删除、插入和更新的代码就可以实现对数据库的操作。图5-17 配置是否启用删除、插入和更新页面1. 查询数据库中的数据在LinqDataSource控件中,我们可以通过Where和OrderBy来指定不同的查询参数。单击图 中的【Where(W)】或【OrderBy】按钮来设置。(1)定义Where子句Where参数使用和其他数据源控件一样的Parameters语法创建的,它可以使用各种运行期间产生的数据源提供数据。如:Form字段、QueryString和Session等等。可以通过图5-18来设置。图5-18配置Where表达式页面(2)定义OrderBy子句通过图5-19,可以定义OrderBy子句,向导默认生成以逗号隔开的字段列表的OrderBy属性值。图5-19 配置OrderBy页面5.2.4任务的设计与实现在网站的根目录下新建一个以MasterPage.master为模板页的名为MobileByType.aspx的内容页,用来显示按品牌展示的商品信息页面。在该页面中首先显示该品牌文本信息,这通过一个名为lbName的Label控件来显示,它的值在页面Page_Load时加载;采用名为dlistMobileByType的DataList控件作为数据显示控件,该控件的数据源来自名为ldsMobile的LinqDataSource控件。1. 给模板页中显示商品品牌的dlistType控件添加ItemCommand事件dlistType_ItemCommand:protected void dlistType_ItemCommand(object source, DataListCommandEventArgs e) if (e.CommandName = imagebutton) Label lb = e.Item.FindControl(lbTypeId) as Label; Response.Redirect(MobileByType.aspx?MbTypeId= + lb.Text); 2. lbName控件的值由以下方法获得:private void ShowTypeName() int id = int.Parse(Request.QueryStringMbTypeId); DataClassesDataContext dc = new DataClassesDataContext(); var query = from m in dc.mbtype where m.TypeId = id select m; foreach (mbtype mt in query) lbName.Text = mt.MbTypeName; 3. dlistMobileByType控件的ItemTempl

温馨提示

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

评论

0/150

提交评论