ASP网页编程之数据整形
缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全数据数据整形或分层的纪录集能显现一个树状布局或相干纪录集。这经由过程在纪录集的字段中包括一个纪录集来完成,能够展示数据库的干系,并且多个纪录集能在一次挪用中前往。有两个来由能够注释它为何是有效的:
·功能:当准确利用时,数据整形能够改良功能。
·便当:在数据整形中十分简单映照父子干系。
要晓得数据整形触及到哪些内容,最复杂的办法是看-8所示的内容:
-8显现了Pubs数据库中表Publishers、Titles及Sales的条理干系。
值得注重的一点是每一个子纪录集都不是自力的纪录集。因而,-8中只要三个纪录集,而不是六个。这是怎样来的呢?在条理干系中每层都有一个纪录集,分离是Publishers、Title和Sales。在Publishers表中援用题目时,实践上是援用了Titles纪录集,但ADO过滤了Titles,以是只显现那些与被选择的出书社对应的纪录。这就简单令人误觉得每一个子元素有一个自力的纪录集。
9.4.1利用数据整形
使用数据整形必需:
·利用MSDataShapeOLEDB供应者。
·利用一种特别的整形言语,它是SQL的一种扩大,同意机关条理。
只管利用新的供应者,毗连字符串的实践改动不会太年夜。这是由于仍旧必要从某处猎取数据。因而,能够这么做:
Provider=MSDataShape;DataProvider=SQLOLEDB;DataSource=...
这里用MSDataShape作为供应者,而一般的Provider变成DataProvider,而毗连字符串的残剩部分坚持稳定。
为数据整形创立毗连字符串的烦琐办法是从创立正轨的毗连字符串入手下手,然后附加到数据整形块的最初。比方,思索以下正轨的毗连字符串。
strConn="Provider=SQLOLEDB;DataSource=Kanga;"&_
"InitialCatalog=pubs;UserId=sa;Password="
能够像上面如许为数据整形供应者创立毗连字符串。
strConn="Provider=MSDataShape;Data"&strConn
这将供应者设置为MSDataShape,而DataProvider成为实践的数据源。初始的毗连字符串已包括了"Provider=",以是为了取得准确的毗连细节,只须后面加上Data。
1.整形言语
整形言语有其本人的语法,但这里我们不盘算触及其机关,它已包括在ADO文献中。年夜多半情形下会接纳以下命令。
SHAPE{parentcommand}
APPEND({childcommand}
RELATEparent_columnTOchild_column)
要了解这一点,最复杂的办法是看一个实例,以Publishers和Titles为例。
SHAPE{SELECT*FROMpublishers}
APPEND({SELECT*FROMTitles}
RELATEPub_IDTOPubID)ASrsTitles
第一行是父纪录集,第二行则是子纪录集。第三行指了然联系关系父、子纪录集的两个字段。这个例子中两个表都有一个名为Pub_ID的字段(出书社ID字段)。这个命令前往一个包括出书社的纪录集,在纪录集的最初又附加了一个含有子纪录集的新列(范例为adChapter)。该列名为AS子句给出,在本例中是rsTitles。
adChapter范例只是申明了该字段含有一个子纪录集。我团体以为,adChild或adRecordset更符合。
经由过程遍历Fields汇合,能够很简单看到父纪录集的字段的情形。关于下面的SHAPE命令,失掉-9所示的了局:
会见子纪录集
如今,我们有了一个子纪录集,它是另外一个纪录集的一个字段,那末怎样会见这个子纪录集呢?很复杂,可使用字段的Value属性来创建另外一个纪录集。
SetrsTitles=rsPublishers("rsTitles").Value
能够遍历父纪录集,对应于每一个父纪录能够失掉一个子纪录集。上面的代码能完成这一点。一般以包括文件、变量声明入手下手。
<!--#INCLUDEFILE="../Include/Connection.asp"-->
<%
DimrsPublishers
DimfldF
DimstrShapeConn
DimstrShape
SetrsPublishers=Server.CreateObject("ADODB.Recordset")
如今创立毗连字符串。
Createtheprovidercommand
strShapeConn="Provider=MSDataShape;Data"&strConn
接上去,输出实践的整形命令。这将创立一个包括出书社的父纪录集和一个含有书名的子纪录集。
nowtheshapecommand
strShape="SHAPE{SELECT*FROMPublishers}"&_
"APPEND({SELECT*FROMTitles}"&_
"RELATEPub_IDTOPub_ID)ASrsTitles"
然后一般翻开纪录集。
Opentheshapedrecordset
rsPublishers.OpenstrShape,strShapeConn
像一般的纪录集一样,可以遍历纪录。
loopthroughthepublishers
Response.Write"<UL>"
WhileNotrsPublishers.EOF
Response.Write"<LI>"&rsPublishers("pub_name")
为了会见子纪录集,设置一个变量来指向谁人包括子纪录集的字段的Value值。本例中该变量为rsTitles。
nowthetitles
Response.Write"<UL>"
SetrsTitles=rsPublishers("rsTitles").Value
变量rsTitles在这里是个纪录集,其感化同一般的纪录集不异。因而,能够遍历该纪录集的值,该值只包括与父出书者婚配的书名。
loopthroughthetitles
WhileNotrsTitles.EOF
Response.Write"<LI>"&rsTitles("title")
rsTitles.MoveNext
Wend
Response.Write"</UL>"
movetothenextpublisher
rsPublishers.MoveNext
Wend
Response.Write"</UL>"
rsPublishers.Close
SetrsPublishers=Nothing
SetrsTitles=Nothing
%>
因而失掉一份使人中意的出书社与书名的列表,如-10所示:
用一些DHTML代码和一些分外的标志,就可以轻松地埋没起书名,而且只要选择出书社时才显现响应的书名。
2.多个子纪录集
假如关于每一个纪录集仅能有一个子纪录集,那末数据整形就不敷完美。但数据整形是极为天真的。比方可使用上面的程序来为出书社援用题目和雇员。
SHAPE{select*frompublishers}
APPEND({select*fromtitles}
RELATEpub_idTOpub_id)ASrsTitles,
({select*fromemployee}
RELATEpub_idTopub_id)ASrsEmployees
只需在APPEND子句后加上其他子纪录集,就可以失掉-11的了局:
会见子纪录集的办法并没有改动,仍然能够用列的Value属性会见子纪录集。只是此时有两个子纪录集,因而必要利用两个变量。
SetrsTitles=rsPublishers("rsTitles").Value
SetrsEmployees=rsPublishers("rsEmployees").Value
3.孙代纪录集
在子纪录集本身还包括子纪录集的情形下,大概会呈现孙代纪录集。比方:
SHAPE{SELECT*FROMPublishers}
APPEND((SHAPE{SELECT*FROMTitles}
APPEND({SELECT*FROMSales}
RELATETitle_IDTOTitle_ID)ASrsSales)
RELATEPub_IDTOPub_ID)ASrsTitles
在第一个APPEND子句内是另外一个SHAPE命令,而不是一个SELECT语句。与多个子纪录集的例子类似,会见孙代纪录集的办法是不异的。
SetrsTitles=rsPublishers("rsTitles").Value
SetrsSales=rsTitles("rsSales").Value
对子和孙纪录集的深度没有实际上的限定,但也不成能创建多于三级或四级的子纪录集。
9.4.2功能
数据整形不会主动改良功能,但准确利用时能够改良功能。主要的是记着其事情体例:
·关于SHAPE命令中的SELECT语句,将完整掏出表中的数据。SQL语句并没有失掉任何优化。如许,假如在父表中到场WHERE子句来限定父纪录集的纪录数,仍能失掉一切的子纪录集。比方:
SHAPE{SELECT*FROMPublishersWHEREState=CA}
APPEND({SELECT*FROMTitles}
RELATEPub_IDTOPub_ID)ASrsTitles
APPEND语句前往一切的题目,其实不仅限于加州(CA)的出书社。记着,这不是SQLJOIN语句。在加州的出书社和一切的题目都被提取了,如许就完成了数据整形。
·可使用存储历程,这会进步一点功能。但是,假如利用一个参数化的存储历程发生子纪录集,那末每次会见子纪录集时,这个存储历程城市实行。这意味着,子纪录集不在前端代码中编程发生,而是只包括存在存储历程发生的那末纪录。不敷的地方是增添了服务器的事情,但如许却能包管数据是最新的,由于每次必要时就从数据库中提取数据。
鄙人一章当我们着眼于客户端数据时,会看到更多有关经由整形的纪录集的先容。
9.5小结鄙人面两章和本书的其他部分将看到相干的其他常识。在后续章节将具体切磋Web服务器与扫瞄器之间的交互。究竟,唯一数据是不可的,还要让人们瞥见这些数据。
asp,jsp,php是web开发的三大技术,asp简单易用且有microsoft做靠山,jsp功能强大是因为有java支持,php则开源跨平台.在国内,asp应用范围最广,jsp发展势头最猛,php则处于劣势.这可能与公司的支持以及技术的培训有关. Session:这个存储跟客户端会话过程的数据,默认20分钟失效 以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。 尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。 尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。 学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。 Session:这个存储跟客户端会话过程的数据,默认20分钟失效 不能只是将它停留在纸上谈兵的程度上。
页:
[1]