仓酷云

标题: ASP.NET网页编程之ASP.NET 2.0 ObjectDataSource控件 [打印本页]

作者: 仓酷云    时间: 2015-1-16 22:45
标题: ASP.NET网页编程之ASP.NET 2.0 ObjectDataSource控件
数据库有很多应用领域,但是如果你单单学数据库的话基本上做数据库管理员比较合适而已,跟领域结合的你还得再学习那些领域知识。(其实数据挖掘我真是不懂,本来这学期开了一门课了。asp.net|object|控件<P>  ObjectDataSource控件与SqlDataSource控件的工具模子是相似的。ObjectDataSource没有ConnectionString属性,它表露了TypeName属性,用于指定必要实例化的实行数据操纵的工具范例(类名)。ObjectDataSource控件与SqlDataSource的命令属性类似,也撑持SelectMethod、UpdateMethod、InsertMethod和DeleteMethod等属性,用于指明实行这些数据操纵的联系关系范例的办法。本文将注释创建数据会见层和营业逻辑层组件,并经由过程ObjectDataSource工具展现ASP.NET2.0数据组件的手艺。

  绑定到数据会见层

  数据会见层组件封装了那些利用SQL命令查询和修正数据库的ADO.NET代码。在典范情形下,它笼统了创建ADO.NET毗连和命令的细节信息,表露了能够经由过程得当参数挪用的办法。典范的数据会见层组件大概表露了上面一些办法:

publicclassMyDataLayer{
 publicDataViewGetRecords();
 publicDataViewGetRecordsByCategory(StringcategoryName);
 publicDataViewGetRecordByID(intrecordID);

 publicintUpdateRecord(intrecordID,StringrecordData);
 publicintDeleteRecord(intrecordID);
 publicintInsertRecord(intrecordID,StringrecordData);
}
  ObjectDataSource可使用上面的体例来联系关系到这个范例:

<asp:ObjectDataSourceTypeName="MyDataLayer"SelectMethod="GetRecords"UpdateMethod="UpdateRecord"
DeleteMethod="DeleteRecord"InsertMethod="InsertRecord"runat="server"/>
  ObjectDataSource请求工具有十分特别的计划形式。这些束缚都是Web使用程序哀求所处的无形态的(stateless)情况引发的。因为在典范情形下,工具的创建和烧毁都是为了服务于一个哀求,因而经由过程工具数据源绑定的工具也是无形态的。在默许情形下,ObjectDataSource接纳TypeName属性指定的范例的默许的机关函数(不带参数),只管经由过程处置ObjectCreating事务来创建一个自界说工具实例,并把它指定给事务参数的ObjectInstance属性,从而完成实例化也是可行的。与SelectMethod属性联系关系的工具办法能够前往任何工具、Ienumerable列表、汇合或数组。在下面的数据会见层示例中,DataView工具完成了IEnumerable接口。我们鄙人一部分将会商到,这些办法也能够前往强化范例的汇合或工具。

GetProducts()->ProductCollection
GetProductsDataSet()->DataSet
GetProduct(intproductId)->Product
  Update、Insert和Delete一样平常把独自的数据项字段作为参数,也能够把带无数据项字段大众属性的汇合类工具作为参数。

UpdateProduct(intid,Stringname,doubleprice,boolinStock)
UpdateProduct(Productp)//p.ID,p.Name,p.Price,p.InStock
DeleteProduct(intid)
  与SqlDataSource的例子相似,传送到Update、Insert和Delete办法的数据项的参数称号或属性必需与SelectMethod前往的字段不异,如许GridView/DetailsView才干主动地举行更新/删除/拔出操纵。与SqlDataSource相似,ObjectDataSource办法的参数也能够与数据参数工具相干联,利用SelectParameters、FilterParameters、UpdateParameters、DeleteParameters或InsertParameters汇合。
上面的例子演示了一个经由过程数据会见层组件(AuthorsDB)表露数据的ObjectDataSource控件。这个范例的类文件寄存在使用程序的App_Code目次中,在运转时ASP.NET静态地编译它。

<asp:ObjectDataSourceID="ObjectDataSource2"Runat="server"TypeName="AuthorsDB"
SelectMethod="GetStates"/>

<asp:ObjectDataSourceID="ObjectDataSource1"Runat="server"TypeName="AuthorsDB"
SelectMethod="GetAuthorsByState"UpdateMethod="UpdateAuthor"OldValuesParameterFormatString="{0}">
<SelectParameters>
<asp:ControlParameterName="state"PropertyName="SelectedValue"ControlID="DropDownList1"/>
</SelectParameters>
</asp:ObjectDataSource>
<P>  绑定到营业逻辑层

  关于数据会见层,我们还必要重点的注重的是,因为SelectMethod把实行查询的了局作为数据视图前往,它仍旧把上层数据库的纲目表露给了显现页面。另有,在数据会见层没有营业划定规矩;它只是复杂地实行查询和前往了局。假如必要把显现与数据库纲目断绝开来,并引进营业划定规矩或考证历程,一般必要把数据会见层包装到营业逻辑层中。

  营业逻辑层与DAL相似,它给ObjectDataSource表露了无形态的办法,用于绑定Web页面中的控件。可是,它一样平常不会间接前往ADO.NET了局,而是前往强化范例的工具,这些工具体现了使用程序所利用的营业实体。这类显现层与上层数据存储纲目的分别,使我们更简单地独自保护站点中的数据会见部分,而不必修正利用数据的页面。只需有得当的两头层,你就能够周全修正上层数据存储纲目,而不必更新使用程序中的自力页面。

  上面就是一个营业逻辑层的例子。

publicclassMyBusinessLayer{

 publicRecordCollectionGetRecords();
 publicRecordCollectionGetRecordsByCategory(StringcategoryName);
 publicRecordCollectionGetRecordByID(intrecordID);
 publicStringGetRecordName(intrecordID);
 publicObjectGetRecordData(intrecordID);

 publicintUpdateRecord(Recordr);
 publicintDeleteRecord(Recordr);
 publicintInsertRecord(Recordr);

 publicintUpdateRecordData(intID,StringData);
 publicintUpdateRecordName(intID,StringName);
}

publicclassRecord{
 publicintID{get;set;}
 publicStringName{get;set;}
 publicObjectData{get;set;}
}
  营业逻辑层和数据会见层之间的次要区分在于,营业逻辑层前往的是强化范例的Record工具的汇合(RecordCollection),而不是数据视图。它也同意我们把这个Record工具作为参数举行更新、拔出和删除操纵。ObjectDataSource的DataObjectTypeName属性同意你设置ObjectDataSource,给它传送范例而不是字段值。在营业逻辑层的办法完成中,你能够包括用于考证营业划定规矩的自界说逻辑。比方,你能够确保只要“反省中”种别的Record才干被更新,大概只要Administrators才干拔出新纪录。你还能够包括考证逻辑以确保在拔出或修正数据库的数据之前,作为参数传送出去的数据范例和值是准确的。请注重,营业逻辑层中的考证划定规矩不是显现层的输出考证(它引导终端用户在提交更新之前输出准确的值)的替换品。

  上面的例子演示了一个叫做AuthorsComponent的复杂营业逻辑层。在它外部,BLL经由过程DAL挪用来实践实行数据库操纵。为了复杂,BLL没有包括任何营业划定规矩或考证,只管它多是一个实际的使用程序。我们还要注重,这个例子没有经由过程编写自界说汇合类来前往强化范例的纪录,而是使用了.NET框架组件2.0中的称为“范型(Generics)”的新言语特征来创建Author工具汇合。利用强化范例汇合让ObjectDataSource在计划时(在VisualStudio和别的工具中)可以推导出营业工具的纲目。

<asp:DropDownListID="DropDownList1"Runat="server"DataSourceID="ObjectDataSource2"AutoPostBack="True"/>
<asp:ObjectDataSourceID="ObjectDataSource2"Runat="server"TypeName="AuthorsComponent"SelectMethod="GetStates"/>
<asp:GridViewID="GridView1"Runat="server"DataSourceID="ObjectDataSource1"AutoGenerateColumns="False"AllowPaging="True"AllowSorting="True">
……
</asp:GridView>
<asp:ObjectDataSourceID="ObjectDataSource1"Runat="server"TypeName="AuthorsComponent"SelectMethod="GetAuthorsByState"UpdateMethod="UpdateAuthor"DataObjectTypeName="Author"SortParameterName="sortExpression">
……
</asp:ObjectDataSource>
  上面的图表显现了GridView、ObjectDataSource和营业逻辑层之间的交互操纵。ObjectDataSource被设置为挪用ContactsList范例的GetContacts办法,前往Contact工具的汇合。GridView列出了Contact工具,并间接绑定到该范例的属性(ID,Name)来天生列。请注重,SelectMethod能够前往一个Contact工具的IEnumerable接口,大概前往单个Contact工具。假如自己没有完成IEnumerable,ObjectDataSource会把SelectMethod前往的了局封装到IEnumerable中。

  ObjectDataSource控件与SqlDataSource相似,当SelectMethod前往数据集、数据视图或数据表工具的时分,它也撑持排序功效。ObjectDataSource依附数据视图。在这个例子中Sort属性实行排序操纵。ObjectDataSource也撑持SelectMethod完成中的自界说排序,假如该办法没有前往数据集、数据视图和数据表,它就十分有效。经由过程把SortParameterName属性设置为从数据源承受SortExpression的办法参数称号,能够完成自界说排序。在挪用SelectMethod的时分,ObjectDataSource会把这个表达式传送到你的办法中,你就能够利用这个表达式完成本人的排序逻辑。后面的例子演示了在AuthorsComponent类中自界说了一个排序完成。

  ObjectDataSource还撑持SelectMethod完成中的自界说分页功效。你必要利用StartRowIndexParameterName、MaximumRowsParameterName和SelectCountMethod属性来设置它。
绑定到VisualStudio数据集
<P>  绑定命据会见层的操纵大概很单调有趣,由于在DAL的分歧办法中,实行SQL语句或存储历程的ADO.NET代码时不异的或类似的。固然你能够使用上述手艺数用定制的ADO.NET代码来编写本人的DAL,VisualStudio仍是供应了一条基于复杂的导游天生数据会见层的便利路子。在这类情形下,数据会见层是强化范例的数据集工具。该数据集包括了TableAdapter范例,它表露了用于前往强化范例的数据表工具的办法。这些办法合适于间接绑定到ObjectDataSource,大概在营业逻辑层组件中挪用。

  为了给VisualStudio工具增加数据集,你必要右键点击“办理计划扫瞄器”并选择“增加新项”,接着选择“数据集”项范例。VisualStudio给App_Code目次增加了一个DataSet.xsd文件,并翻开了数据集计划器,载进了TableAdapter导游。你能够跟从TableAdapter导游,指定命据库中的SQL语句或存储历程,接着在导游的最初一个页面中输出与这些查询/命令联系关系的办法称号。

  TableAdapter能够表露两个办法:Fill办法用于添补已有的数据集,Get办法前往一个已添补好的数据表工具。前者更合适于Windows客户端(在使用程序的性命周期中数据集保留在内存中),尔后者合适于ObjectDataSource。TableAdapter导游还为你供应的SQL选择语句主动地天生了更新、拔出和删除办法(必要选择主键)。在设置好导游以后,VisualStudio给数据集计划器增加了一个新的数据表和TableAdapter范例。

  TableAdapter形貌了单个了局集的纲目和纲目上的选择、更新、拔出或删除操纵。你能够经由过程在数据集计划器中右键单击,给数据集增加多个TableAdapter。你还能够右键点击计划器中的TableAdapter框给TableAdapter增加分外的查询(倘使它们前往不异的纲目)。比方,你的TableAdapter大概同时包括了GetAuthors()和GetAuthorsById(intid)办法,可是假如要增加GetTitles()办法,大概必要增加一个新的TableAdapter。下图显现了增加了多个TableAdapter的数据集计划器:

  你完成数据集的计划以后,就能够保留DataSet.xsd文件了(它引发该范例被计划器背景编译,以供页面利用)。你能够看到表露给页面代码的这些范例:

protectedvoidPage_Load(objectsender,EventArgse)
{
 DataSetTableAdapters.PhotosTableAdapteradapter=new DataSetTableAdapters.PhotosTableAdapter();
 adapter.GetPhotosForAlbum(0);
}
  可是,你不必要从本人的代码中挪用这些办法。你能够把ObjectDataSource绑定到这些办法:

<asp:ObjectDataSourceID="ObjectDataSource1"runat="server"
TypeName="DataSetTableAdapters.PhotosTableAdapter"
SelectMethod="GetPhotosForAlbum">
<SelectParameters>
<asp:QueryStringParameterName="albumID"QueryStringField="id"Type="Int32"/>
</SelectParameters>
</asp:ObjectDataSource>
  上面的例子演示了一个绑定到DataSet.TableAdapter办法的ObjectDataSource。在前面几个例子中我们将利用这个数据集演示怎样利用ASP.NET数据控件完成一个复杂的相册使用程序。请注重这个例子中的数据视图利用了一个叫做ImageField的新字段范例来显现照片。我们还要注重,ObjectDataSource中利用的ConvertNullToDBNull会招致空参数值在传送给TableAdapter办法之前被转换为DbNull(必需的)。

<asp:ObjectDataSourceID="ObjectDataSource1"runat="server"TypeName="DataComponentTableAdapters.AlbumsTableAdapter"
SelectMethod="GetAlbumsByOwner"UpdateMethod="Update"ConvertNullToDBNull="true"OldValuesParameterFormatString="original_{0}">
</asp:ObjectDataSource>
<asp:ObjectDataSourceID="ObjectDataSource2"runat="server"TypeName="DataComponentTableAdapters.OwnersTableAdapter"SelectMethod="GetOwners"/>既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。
作者: 海妖    时间: 2015-1-19 22:42
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
作者: 小魔女    时间: 2015-1-26 23:24
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
作者: admin    时间: 2015-2-4 21:53
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
作者: 不帅    时间: 2015-2-10 18:38
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
作者: 若相依    时间: 2015-3-1 13:48
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
作者: 飘飘悠悠    时间: 2015-3-10 18:12
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
作者: 活着的死人    时间: 2015-3-17 09:08
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
作者: 变相怪杰    时间: 2015-3-24 04:24
能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2