|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
也许唯一可以让世人留恋Java的理由就剩下它的王牌——跨平台。asp.net|数据 1、简介
作为开辟职员,当我们在进修新手艺时,例子多是我们最年夜的仇人。而教程常常计划得易于了解,可是同时,它们经常加固了怠惰,低效性,乃至于伤害的编码习气。再也没有比ADO.NET示例更能申明成绩的了。在本文中,我们将筹办剖析一下强范例工具关于你的数据库开辟的意义和为何在没有例子的情形下你应当在使用程序中只管利用强范例工具。
详细地说,我们将剖析如何在VisualStudio2005中创立和利用强范例DataSet。正如本文所切磋的,相对别的可选的弱范例化的数据存取手艺,强范例DataSet供应了良多长处;而且,借助于VisualStudio2005,创立和利用强范例DataSet比以往更加简单。
2、强范例工具基本及长处
为了了解强范例化的寄义,无妨让我们先思索一下约会的例子。假如你是一个只身汉,那末,你企望与甚么范例的人约会呢?你大概已有了本人详细的尺度,如充裕且吸惹人或多是寓居前提优胜而性感。不管你的前提怎样,当你决意想与谁在一同呆更长的工夫时,你都不免有一套本人的约会尺度。假如你很明智,能够列出一个经由事前深图远虑的列表,如许能够匡助你勤俭不用要的情感支付。把一项"非酗酒"的前提到场到你的约会尺度中将会勤俭你大批的工夫,而且同意你把你的工夫和精神用于与更好的候选者约会。
你大概困惑,这怎样能与编程举行对照呢?请听我的注释。ADO.NET数据存取工具的计划是为了完成最年夜的天真性。除非你碰到相称年夜的贫苦,不然,当你从数据库读取数据时,你城市利用大批一般的未经范例化的工具-固然,.NET框架完整同意如许做。而利用我们的约会类比法,老是把你的干系数据看成泛型工具则有点象供认"我只与满意我前提的人约会"。岂非你不克不及略微放宽一些前提吗?作为你的伴侣,我必需倡议你"先断定一些尺度,再精简一下你的列表!"大概更好些。
正如无视选择你要约会的人可以招致将来的干系成绩,与你的工具坚持"松耦合"可以给你的代码带来毛病。别的,由于假如你让任何旧工具"收支"你的子程序的话,那末,直到你的使用程序在运转时候实行时,你大概才会晓得存在成绩。在我们的日期约会类比中,在运转时候捕捉毛病很相似于你与你的约会者在一家时兴的意年夜利餐馆举行一场疾苦而为难的会商。是的,你发明了这个成绩;可是,假如你已事前企图好的话,那末你的了局就不会是"一群用餐者盯着你,而你全身是意年夜利烤碎肉卷"。假如你复杂地把一些更严密的尺度使用于你的代码中,那末在你的使用程序入手下手运转前(在编译时候)你就可以够捕捉毛病。比方,请思索上面的示例代码:
stringFirstName=myrow.("FirstName").ToString();
下面的DataRow就长短范例化的;了局,你必需以一个串情势作为你要查询的列名来存取这个值(大概,利用这个列汇合中的列的索引值)。极可能,这个列真正存在。一个DataRow列的数据范例是工具;我们假定FirstName列的基础数据范例是字符串,可是,我们必需显式地把它转化成一个字符串以便利用它。假如列名产生变更(比方,你把它改成PersonFirstName),那末编译器是不克不及关照你的。万万不要如许!因而,假如你的代码看起来更象以下情势,那末你的生存就会更简单些而你的代码将更加牢靠:
stringFirstName=PersonRow.FirstName;
在第二个例子中,我们具有一个强范例行,而且我们晓得FirstName属性是字符串范例。在此,不会呈现混乱的列名,并且也不存在混乱的工具转换成绩。编译器为我们作范例反省,而且我们能够持续举行别的义务而不用忧虑是不是我们已准确输出了列名。
关于一切别的列也是云云;总之,当你可以利用一个更加详细的范例时,你永久不该该利用一个泛型工具。可是,请等一下。该强范例工具出自那边?我想我可以告知你这些工具是为你主动创立的。但是,正如要创建优秀的干系必要工夫和精神一样,强范例化你的工具也必要支付别的勉力。好的方面在于,这里所消费的分外工夫是值得的,并且节俭了未来更多的花在调试上的工夫。
存在多少种能够完成强范例化的办法,在本文余下的部分中,我们将会商如何在VisualStudio2005中创立强范例DataSet;固然,还将剖析一下如许做的长处和弱点。
3、在VS2005中创立强范例DataSet
实在,强范例DataSet是一些提早界说了它们本人的列与表的泛型DataSet,如许编译器已晓得它们将会包括甚么内容。不是把你的数据包装为一个"露指手套",一个强范例DataSet好似一个"手套"。每个VisualStudio的后续版本会使得强范例化一个DataSet的历程更加简单。在这个示例中,我们将利用来自于SQLServer2005中的AdventureWorks数据库。这只需复杂地实行以下步骤:
1.翻开VisualStudio,然后创立一个新的ASP.NET网站。
2.在SolutionExplorer中,占击以增加一个新项而且选择DataSet,并定名为AdventureWorks.xsd。VisualStudio保举把这个DataSet文件放到App_Code文件夹下。
3.这个AdventureWorks.xsd将在计划形式下翻开,而且激活"TableAdapterConfiguration"导游。如今,仅仅点击一下"Cancel"便可。
4.定位到ServerExplorer工具箱,导航到你的SQLServer2005数据库和AdventureWorks数据库。(假如你还没有安装AdventureWorks数据库的话,你能够从微软的SQLServer2005SamplesandSampleDatabases下载页面下载它,另有别的的SQLServer2005示例。)
5.把SalesOrderHeader和SalesOrderDetail表拖动到你的DataSet计划器窗口。如今,这个窗口应当相似于上面的屏幕快照。注重,关于我们到场的每一个表,VisualStudio都创立一个强范例DataTable(该称号是基于原始的表)和一个TableAdapter。这个DataTable为我们界说了每个列。这个表适配器是我们用来添补这个表的工具。缺省情形下,我们有一个Fill()办法,由它找到表中的每行。
这个强范例DataSet将前往在这两个表中的一切纪录。既然AdventureWorks数据库包括大批的定单信息,那末我们为何不创立一个更加详细些的查询呢?我们能够把办法增加到我们的TableAdapter工具来检索一个更加详细的表的纪录子集。起首,右击SalesOrderHeaderTableAdapter,而且选择"Add|Query"。选择"UseSQLstatements"而且点击Next按钮。然后,选择"SELECTwhichreturnsrows"而且点击Next按钮。最初,在窗口中输出以下查询(或利用QueryBuilder来完成不异的义务):
SELECT
SalesOrderID,RevisionNumber,OrderDate,DueDate,ShipDate,
Status,OnlineOrderFlag,SalesOrderNumber,PurchaseOrderNumber,
AccountNumber,CustomerID,ContactID,SalesPersonID,TerritoryID,
BillToAddressID,ShipToAddressID,ShipMethodID,CreditCardID,
CreditCardApprovalCode,CurrencyRateID,SubTotal,TaxAmt,Freight,
TotalDue,Comment,rowguid,ModifiedDate
FROMSales.SalesOrderHeader
WHERE(OrderDate>@OrderDate) 这个SQL查询是一个复杂的SELECT查询,它有一个@OrderDate参数以进一步减少了局局限。如许能够避免我们前往数据库的每个定单。点选"FillaDataTable"和"ReturnaDataTable"复选框,然后点击Finish。在增加这个SELECT语句后,你的计划者如今应当有一个内部查询已增加到这个SalesOrderHeaderTableAdapter,请参考上面的屏幕快照。
4、在一个ASP.NET页面上利用强范例DataSet
经由过程创立强范例DataSet,我们能够仅经由过程编写几行代码就能够完成简单地在一个ASP.NET页面显现这些数据。起首,在你的网站上创立一个ASP.NET页面而且在计划形式中察看它。然后,拖放一个GridView控件到其上,坚持其ID为GridView1。翻开ASP.NET页面的源代码而且在文件的顶部导进AdventureWorksTableAdapters定名空间(在C#中,该语法为:"usingAdventureWorksTableAdapters;")。最初,把以下代码增加到Page_Load事务处置器中:
//创立SalesOrderHeaderTableAdapter
SalesOrderHeaderTableAdaptersalesAdapter=
newSalesOrderHeaderTableAdapter();
//失掉产生于2004年7月1日以后的定单
AdventureWorks.SalesOrderHeaderDataTableOrders=
salesAdapter.GetDataBy(newDateTime(2004,7,1));
//把定单了局绑定到GridView
this.GridView1.DataSource=Orders;
this.GridView1.DataBind(); 这段代码是很复杂的。我们创立SalesOrderHeaderTableAdapter的一个实例-我们将利用它来添补DataTable。注重,不是声明一个泛型DataTable,我们声了然一个SalesOrderHeaderDataTable范例的工具。为了添补这个DataTable,我们挪用GetDateBy()办法而且传送给它一个DateTime工具。还要注重,乃至这个检索命令也是强范例化的,由于我们必需传送一个DateTime工具,而不单单是一个泛型工具。上面的屏幕快照显现了下面示例代码的明晰了局。
除经由过程代码把了局绑定到GridView外,你还可使用一个ObjectDataSource,设置它的TypeName属性为AdventureWorksTableAdapters.SalesOrderHeaderTableAdapter,而且把它的SelectMethod设置为GetData或GetDataBy。
5、利用强范例DataSet拔出、更新和删除数据
在本文中,我们已看到了如何利用一个强范例DataSet从一个数据库当选择数据。但是,你还可使用这些工具来拔出、更新和删除基础的数据库数据。
除不用编写代码来存取数据库外,利用这个强范例化的DataSet的别的一个很年夜的长处是,在此不存在编译器不克不及反省的字符串列名埋伏在我们的代码而且我们不用举行任何工具转换。假如我们已经改动过我们的数据库形式,那末一旦我们更新我们的AdventureWorks.xsd文件,我们将注重到在编译时代的存在于我们的使用程序中的一切的伟大变更。
6、小结
实在,除利用强范例DataSet外,另有别的的办法来完成你的使用程序的强范例化。你能够创立定制类-比DataSet更加轻量级而且可以准确地呼应于你的数据库。并且,另有一些第三方软件开辟者供应工具来主动化这一历程。个中,一个出格的产物是LLBLGenPro,就是我对照喜好的工具之一,我还写了有关于它的一本书:《RapidC#WindowsDevelopment:VisualStudio2005,SQLServer2005,andLLBLGenPro》。别的一个盛行的工具是CodeSmith。乃至微软也在利用一个与之相似的工具-DLINQ,它仍处于测试阶段,最少鄙人一年中不会上市。
假如你利用VisualStudio强范例DataSet办法,那末你不必要购置任何别的的软件-这是一个分明的长处。一切这些办理计划都有其各自分歧的特性和长处,可是强范例化你的干系数据的次要长处还在于:牢靠性,更少的毛病和更少的调试工夫消费;别的,剖析数据库形式变更的影响并完成它们也更加简单。最初,十分但愿你已懂得到强范例化的长处。祝你侥幸!
据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。 |
|