仓酷云

标题: ASP.NET教程之.NET 2.0里强范例数据创立多层使用 [打印本页]

作者: 兰色精灵    时间: 2015-1-16 22:33
标题: ASP.NET教程之.NET 2.0里强范例数据创立多层使用
语言是不是不是最重要的?创立|数据.Net2.0正式版的正式公布,对我们程序开辟职员来讲无疑是一件很年夜的丧事,已良多的人入手下手懂得并利用.NET2.0。VisualStudio2005的一些新的加强功效和ADO.NET2.0的新特征让我们开辟高可伸缩的多层数据库使用程序加倍复杂和快速。本文将率领人人利用VisualStudio2005来创立一个N层数据库使用的示例,并先容一些NET2.0和VisualStudio2005相干的常识。

在.NET1.1下就能够利用强范例数据集,但是在VisualStudio2003里开辟起来仍是有一些不便利,在VisualStudio2005里对DataSet的计划视图做了很年夜的改善,由于ADO.NET2.0增添了TableAdapter工具,以是如今也能够在DataSet计划视图里增加DataTable的表适配器。之前的typedDataSets只是一些数据实体(哑工具,只要属性的类)的汇合,其实不能很便利的自我办理耐久化,和数据完全性考证等。如今能够很便利的完成这些。

我们明天树模的这个例子是做一个显现消耗者列表,并能够检察每一个消耗者定单详目的一个小程序。先用VisualStudio2005创立一个typedDatasetSample.lib的类库项目,这个类库项目呢,我们次要保留一些强范例数据集,我们给这些强范例数据集加上一些自我耐久的办法和一些营业逻辑。然后呢我们就能够在构建桌面程序大概Web程序的时分利用它了,它就相称于我们的营业逻辑层,今后大概是经由过程Remoting来公布,大概经由过程Web服务公布,大概间接拷贝DLL来公布,一样平常把它放在ApplicationServer上,以便利你的前台SmartClient,ASP.Net,和挪动使用来实例并利用。

这是一个企业使用的中心,以是我们先构建它,然后就能够用CompositeUIApplicationBlock(CAB)来创立SmartClient界面,用ASP.NET2.0和微软的EntERPriseLibraryNovember2005CTP创立Web使用界面和挪动使用界面。Asp.net2.0到场了WebPart,MastPage,ObjectDataSource这几个控件年夜年夜简化了创立Web界面使用的历程,年夜年夜进步了开辟者的用户体验(团体感到是如许的,利用起来十分的恬逸)。Asp.Net2.0的设备自顺应功效,设备过滤器闪开发者构建挪动使用和构建一般Web使用一致了起来,写一段程序大概不必任何修正就便可以在InternetExplorer上显现,也能够在InernetExplorerforPocketPC上显现,也能够在OpenwaveWAPEmulator上显现,新的MultiView,View,Pager控件也对你疾速开辟挪动使用供应了很年夜的匡助。我保举人人只管利用微软保举的工具和手艺来完成本人的企业使用,究竟微软仍是更值得信任的。

项目建好了,先删失落默许的Class1.cs,右键单击办理计划选择【Add】【NewItem】增加一个名为Customer.xsd的数据集。Ctrl+Alt+S翻开ServerExplorer,右键单击【DataConnections】选择【AddConnection】,在翻开的窗口里的【ServerName】输出框里输出“localhostsqlexpress”,选中【UseWindowsAuthentication】单选框,在【Selectorenteradatabasename】选择框里选择“Northwind”数据库,点击【TestConnection】,测试乐成后单击【OK】按钮。如许我们就新建了一个数据毗连。

在ServerExplorer里展看顺次睁开localhostsqlexpress节点,Tables节点,并把Customers表拖到数据集计划视图上。我们能够看到VisualStudio主动给我们增加了一个Customers的强范例数据集和一个叫CustomersTableAdapter的表适配器,并给这个表适配器主动增加了一个Fill的办法,这个办法是用来添补Customers数据集的。仔细的伴侣大概会发明在properties文件夹下增加了一个Settings.settings的文件,双击它能够看到内里保留了一个数据库毗连字符串,这也是.NET2.0的新特征,今后还能够以编程的体例来会见它,假如感乐趣也能够看看它主动天生的Settings.Designer.cs文件。

右键在CustomersTableAdapter最下面单击并选择【AddQuery】,选择【UseSQLstatements】,点击【next】按钮这个选项是我们间接编写SQL语句,上面两个选项分离是创立一个新的存储历程大概利用一个新的存储历程。下一个界面是让你选择查询的范例,是拔出操纵仍是删除操纵仍是更新操纵等,我们先创立一个拔出操纵,选择【Insert】进进下一步,点击【QueryBulider】来可视化的天生SQL语句,这个查询天生器我想人人都很熟习吧,比我的wawaCodePro要天真多了,你能够很便利的创立出多表毗连的庞大查询语句,以能够手动创立一些定制的Insert,Update等SQL语句,人人不要觉得本人手工写庞大的SQL语句是很酷的事变,实在这个会利用这个查询天生器才凶猛呢,Access里就有的。创立完语句后能够点击上面的【ExcuteQuert】按钮来测试你的语句是不是准确,由于我们是一个必要参数的SQL语句,以是会弹出【Queryparameters】窗口来让你输出参数。最初我们天生的语句以下。
  1. INSERTINTOCustomers(CustomerID,CompanyName,ContactName,ContactTitle,Address,City,Region,PostalCode,Country,Phone,Fax)VALUES(@CustomerID,@CompanyName,@ContactName,@ContactTitle,@Address,@City,@Region,@PostalCode,@Country,@Phone,@Fax)
复制代码

点击下一步键进自界说的办法名字“NewCustomer”,点【next】【finish】。假如要修正已天生的查询,能够在要修正的查询上右键选择【Configure】以导游的体例来从头天生查询,大概选择响应查询,在【properties】面板里设置它的属性。分离以不异的体例增加删除和修正的查询。删除的语句以下:

DELETEFROMCustomersWHERE(CustomerID=@Original_CustomerID)

删除的办法键进“DeleteCustomerByCustomerID”。

修正的语句以下:
  1. UPDATECustomersSETCompanyName=@CompanyName,ContactName=@ContactName,ContactTitle=@ContactTitle,Address=@Address,City=@City,Region=@Region,PostalCode=@PostalCode,Country=@Country,Phone=@Phone,Fax=@FaxWHERE(CustomerID=@Original_CustomerID)
复制代码

修正的办法键进“UpdateCustomerByCustomerID”。

人人有乐趣能够看看主动在Customers.Designer.cs文件里天生的代码,统统的统统VisualStudio都给你天生了。定位到NewCustomer()办法能够看到它有个[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert,false)]属性,这是设置让ObjectDataSource,BindSource等数据源控件主动绑定响应操纵的属性,估量用的是一种Ioc(把持反转)的机制来完成的,你在设置ObjectDataSource的时分它的拔出办法会主动绑定到这个办法上,一会儿就会看到。

以上我们把显现消耗者列表,和消耗者的修正,删除,增加等耐久化操纵代码天生了,我们还没有写一行代码,包含SQL语句哦。我们的数据实体(强范例数据集的ROW)固然是哑工具,可是我们的表适配器能够以托管的情势来对这些实体举行CRUD耐久化操纵,相似于CMP(容器托管耐久化,这里的表适配器就相称于容器)形式,然后我再告知人人怎样给数据实体增加自界说营业逻辑的办法(大概一个办法不克不及算是一个Case,但我感到猎取消耗者的定单最少是一个Action吧)。固然了,我这里告知人人的只是一种紧耦合的办法,假如你想计划天真度对照高的高度可伸缩的使用,只管利用一些Interface,Service,Event,properties(自界说属性)等手艺来完成数据实体和数据实体详细操纵的松懈耦合,如许就能够做到我在UI层只援用Customer这个营业实体,然后挪用Customer.GetOrderDetails()办法的时分,大概是在当地DLL里完成,大概是在用Rmorting体例毗连到ApplicationServer来完成,大概是经由过程一个叫做GetOrderDetailsByCustomerID的Web服务来完成的。

如今我们来做一个定单详目的营业实体和猎取某个消耗者定单详目的操纵,由于Northwind数据库里没有这么一个间接的表来直不雅的显现定单详目,Orders只是一个交织援用表,OrderDetails表也是一个交织援用表,而我们的定单详目要显现定单号,消耗者称号,产物称号,购置数目,单价,雇员称号等信息,而这些信息散布在多个表中,我们不克不及复杂的把一个表拖放到数据集计划视图来天生响应的营业实体和表适配器。我们能够在数据集计划视图里的空缺处右键选择【AddTableAdapter】,然后按导游在【QuertBuilder】里把Customers,Orders,OrderDetails,Procucts,Employees五个表拖到数据表栏上,然后他们之间的外键干系会主动的可视化的指定,然后分离用鼠标选择几个表的某些字段,最初天生语句以下。
  1. SELECTCustomers.CustomerID,Customers.ContactName,[OrderDetails].UnitPrice,[OrderDetails].Quantity,Products.ProductName,Orders.OrderID,Orders.OrderDate,Employees.FirstName+Employees.LastNameASfullnameFROMCustomersINNERJOINOrdersONCustomers.CustomerID=Orders.CustomerIDINNERJOIN[OrderDetails]ONOrders.OrderID=[OrderDetails].OrderIDINNERJOINProductsON[OrderDetails].ProductID=Products.ProductIDINNERJOINEmployeesONOrders.EmployeeID=Employees.EmployeeIDWHERE(Customers.CustomerID=@CustomerID)ORDERBYCustomers.CustomerIDDESC
复制代码

办法名修正成“GetOrderDetailsByCustomerID”,并把天生的强范例表重定名为OrderDetails。

别的在表适配器导游里有一个【advert】按钮,点击翻开后能够设置本查询是不是撑持悲观并发锁定等处置,由于在一个多用户的数据使用里举行删除和修正操纵的时分要思索并提问题的,这个是个很辣手的成绩,VisualStudio也帮我们办理了(详细道理我还不太分明,我没有具体研讨数据集主动天生的代码,通常为用工夫戳列大概一长串where子句来处置并发的。)

今朝为止,我们仍旧一行代码也没有写,不外如今要写一┝恕K骺瞻状Γ蚩Customers.cs文件。能够看到Customer类有个partial润色符,这也是.net2.0的新特征,由于Customer这个类一半在Customer.Desinger.cs里,而另外一半散布在Customer.cs里,你从头修正了表适配器,会主动同步Customer.Desinger.cs里代码,而你本人写在Customer.cs里的代码不会给你掩盖,看来.NET2.0的新特征思索仍是很体恤的。之前我们只能由代码天生器天生一个基类,然先手工把自界说代码写到一个子类里,以避免代码天生重视重生成代码的时分把你本人写的代码掩盖失落,对框架和架构感乐趣的伴侣大概看过《.NET企业使用初级编程》里的谁人WEO系统布局和ObjectBuilder代码天生工具。我们能够在Customer类里增加OnColumnChanging,OnRowChanging等办法来举行数据完全性的考证,详见MSDN,这里不做重点解说。

由于默许天生的GetOrderDetails办法是一个非静态办法,利用起来有些不便利,为了便于利用,我们在Customer.cs里到场一下语句。用一个静态办法来重写(我也不晓得是重载仍是重写了)非静态办法GetOrderDetails。
  1. partialclassCustomersTableAdapter{ publicstaticCustomer.OrderDetailsDataTableGetOrderDetails(stringCustomerID) {  typedDatasetSample.lib.CustomerTableAdapters.OrderDetailsTableAdapter=newtypedDatasetSample.lib.CustomerTableAdapters.OrderDetailsTableAdapter();  returno.GetOrderDetailsByCustomerID(CustomerID); }}
复制代码

由于默许天生的营业实体类是CustomersRow,我们来改善它,给它加一个自界说办法。(可是我感到CustomersRow这个名字欠好听,假如做一个它的子类叫CustomersEntity的话,但是子类又不克不及援用父类,以是这个成绩我也不晓得怎样办理,以是先用支解类来增加一个新办法,而不是承继CustomersRow类然后给子类增加一个新办法)
  1. partialclassCustomer{ partialclassCustomersRow {  publicCustomer.OrderDetailsDataTableGetOrderDetails()  {   returnCustomersTableAdapter.GetOrderDetails(this.CustomerID);  } }}
复制代码

好了,这个类库就做到这里了,你固然能够增加别的一些营业逻辑,封闭这个项目。如今我们先创立一个typedDatasetSample.Web的网站。在办理计划里点击右键选择【Existingproject】把方才的数据集类库增加到网站办理计划里。然后在网站项目里右键选择【AddReference】把typedDatasetSample.lib项目援用一下。

翻开Default.ASPx的计划视图,在ToolBox里拖放一个DetailView控件出去,重定名为CustomerDetailsView。点击右上角的小三角ChooseDataSource,选择newdatasource,选择【object】就是增加一个ObjectDataSource,定名为CustomerObjectDataSource。点击【next】按钮后【chooseyourbusinessobject】里选择CustomersTableAdapter,下一步后选择CRUD操纵的映照办法,后面我们说过一些办法加上[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert,false)]属性就会主动在这里绑定,以是我们间接在这里设置一下就好了。由于在体系主动天生了一些CRUD办法,我们不必它们,我们用我们的自界说查询和办法,好比说NewCustomer()办法,而不是默许的Insert()办法,由于这个不直不雅。然后把EnablePaging,Instering,Editing,Deleteing的勾打上。由于Customers内外数据太多,我们把ObjectDataSource的FilterExpression属性设置成“ContactTitle=Owner”以削减检索的数据,实在CustomerObjectDataSource就相称于一个实践的数据源,它有很多多少仿照数据源的特征,人人能够具体看看。在ASP.NET2.0里可让你不知不觉就利用了MVC形式。

好了,我们又没有写一行代码,按F5运转一下。看一下增加,删除,修正,扫瞄是否是都能用了呀,就是这么复杂。实在假如我们把增加,删除,修正等营业逻辑用Oracle完成一遍,实在我们的asp.net程序几近不必修正代码,只从头换一下objectdatasource就能够了。

上面拖放一个GridView控件,定名为OrderDetailGridView。选中CustomerDetailsView然后在属性窗口,点击属性表头的闪电按钮,一切可用的工夫就显现了,双击DataBound会在Default.cs文件里增加CustomerDetailsView_DataBound办法,这个事务是在Detail控件数据绑定的时分触发的,修正成以下的代码。
  1. protectedvoidCustomerDetailsView_DataBound(objectsender,EventArgse){ //猎取以后的数据绑定项并强迫转换为DataRowView范例 DataRowViewdrv=(DataRowView)CustomerDetailsView.DataItem; //假如以后是增加新项目形态的话,不会猎取DataRowView援用,以是要加一个IF判别。 if(drv!=null) {  //猎取row并强迫转换成CustomerEntity营业实体类  typedDatasetSample.lib.Customer.CustomersRowcustomer=(typedDatasetSample.lib.Customer.CustomersRow)drv.Row;  //运转营业实体类的一个自界说办法并把前往了局作为GridView的数据源  OrderDetailGridView.DataSource=customer.GetOrderDetails();  //绑定GridView  OrderDetailGridView.DataBind();}
复制代码
F5运转一下,看看GridView是否是主动绑定了,翻页看看GridView是否是显现每一个客户的定单详目呢。

Asp.net的使用就开辟完了,上面我们来开辟一个桌面程序。封闭网站办理计划,创立一个typedDatasetSample.Win的Windows使用程序,然后把typedDatasetSample.lib项目包括出来,并援用到typedDatasetSample.Win项目里。然后把一个DataGridView拖出去定名为customersDataGridView,并把Dock属性设置为fill,让它能添补满窗体。再拖一个BindSource出去定名为customersBindingSource,再拖一个CustomerTableAdapter出去并定名为ta,VisualStudio2005撑持几个复杂从重构手腕,个中包含重定名,以是你重定名控件称号的时分,它会主动帮你修正一些相干的代码,对照智能的。然后选择窗体,在事务窗格里双击Load事务,键进以下代码。
  1. privatevoidForm1_Load(objectsender,EventArgse){ this.customersBindingSource.DataSource=ta.GetData(); this.customersBindingSource.Filter="ContactTitle=Owner"; this.customersBindingSource.Sort="CountryDESC,AddressASC"; this.customersDataGridView.DataSource=customersBindingSource;}
复制代码
好了,按F5运转以下,看看DataGridView是否是被数据添补了呢。由于我团体对桌面程序不是太感乐趣,也没有良多履历,以是只演示一个数据添补的营业逻辑,别的的耐久操纵和自界说操纵,对WinForm感乐趣的伴侣能够本人做一做,我这里是以写代码的体例来完成的数据添补,实在也能够以可视化的操纵来完成数据网格的添补。J2EE比较成熟一点,一些比较出名的企业应用软件都是基于J2EE的。以后的发展就不好说了。不过java比较烦,学.net的话,微软把很多工具都封装好了,学起来可能容易一点。
作者: 简单生活    时间: 2015-1-19 16:29
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
作者: 谁可相欹    时间: 2015-1-28 08:36
如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
作者: 再见西城    时间: 2015-2-5 20:14
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
作者: 透明    时间: 2015-2-13 11:12
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
作者: 分手快乐    时间: 2015-3-3 20:36
能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。
作者: 金色的骷髅    时间: 2015-3-11 13:33
可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
作者: 飘飘悠悠    时间: 2015-3-18 14:38
在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的




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