ASP编程:纪录集
想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的纪录集后面已提到,纪录集是ADO中最经常使用的工具,这其实不值得奇异。究竟,他们包括着数据。可是,关于纪录集另有比设想的更多的内容,晓得数据怎样保留和处置很主要,由于这为选择利用哪一种纪录集供应了更多的参考。
纪录集有分歧的范例,在一些微小的中央存在着差别,很简单形成掉误。起首必要仔细议论的是光标的观点。
8.4.1光标
光标(cursor)是让很多人感应狐疑的观点,但实践上十分的复杂。
光标用来办理纪录集和纪录集确当前地位,后者是由以后纪录指针来处置的。
这不是Recordset工具所做的吗?是的,可是纪录集也是依托它的光标。这仍旧没有回覆光标是甚么这个成绩,那末先来看一个纪录集,如表8-2所示:
这里有六行四列。翻开一个纪录集,以后纪录就是第一个纪录,即为BobWhite的那笔记录。用甚么来标识以后纪录?用以后纪录指针。那末又怎样处置这个指针呢?当必要移到下一笔记录大概是其他纪录时,是经由过程光标来完成的。在会见以后行的字段时,光标晓得今朝位于哪一行,以是能前往准确的值。假如试图移出纪录集的最初一行,光标也会处置。
了解光标的一种好办法是将光标设想成为一个能够在纪录集内挪动的窗口。这一窗口与纪录集的单个行一样高,一样长,因而一次只能看到一行数据值。当你移到另外一笔记录时,这个窗口也随着挪动。
大概你以为这相称复杂,但它的确很主要,由于能用光标做甚么是由光标的范例决意的。
1.光标范例
光标的范例标识了光标所可以供应的功效。这里有四品种型的光标:
·静态(adOpenStatic)。静态光标含有对纪录的静态拷贝。这意味着在纪录集创建以后,纪录集的内容就流动了。其他用户对纪录的变动、增加和删除都是不成见的。同意在纪录会合向前、向后挪动。
·只许前移(adOpenForwardOnly)。缺省的光标范例,除只同意向前挪动外,其他的与静态光标不异。
·静态(adOpenDynamic)。静态的光标没有流动的纪录集。其他用户的变动、增加或删除操纵在纪录会合是可见的。同意在纪录会合向前、向后挪动。
·键集(adOpenKeyset)。键集范例的光标除纪录集是流动的,其他的与静态光标类似。能够看到其他用户的修正,但新纪录却不成见。假如其余用户删除纪录,那末这些纪录在纪录会合将会变得不成会见。这项功效是经由过程标识纪录集的键来完成的,以是键一向保存着,即便改动或删除纪录。
为了了解这些观点,再设想光标窗口。关于只许前移的光标,能够看做是一个位于单向齿轮上的窗口,只能向前挪动。这一特性的有益的地方在于一旦经由过程了一笔记录,光标就会完整健忘该纪录,由于永久不会回到该纪录上。静态光标则移往了单向齿轮,同意向后挪动;由于也能向后挪动,光标必要跟踪这些纪录。因为这个缘故原由,静态光标比只许前移的光标慢。
关于键集和静态范例的光标,窗口能够前后挪动,但所看到的内容大概会改动。键集光标能够看到他人对数据的变动,但看不到新的或已删除的纪录。因而,纪录集是流动的,但不是内容流动。静态光标将它扩大了,不但能够改动纪录的内容,并且能够改动纪录集。以是在静态光标中可以看到有新的纪录呈现,同时删除的纪录从纪录会合消散。
利用的光标范例取决于想到达的目标。假如只想扫瞄纪录,大概是为了创立一个表格或一个选择列表,那末用只许前移的光标是最好不外了。固然利用其他范例的光标速率大概会慢一些,但也能够一般事情。
光标的范例会影响功能,出格是服务器光标。比方,在微软的SQLServer6.5中,键集和静态范例的光标都必要在一时数据库(tempdb)中放进一个完全的数据拷贝。个中,键集范例的光标比拟较而言略微高效一些,由于它只将键拷进一时数据库。关于SQLServer7.0情形不是如许,分歧范例的光标的运转效力不同不是很年夜。
2.光标地位
既然已注释了甚么是光标,和光标怎样办理数据,可是光标在那里呢?谜底不是流动的,由于光标依附于数据存储。某些数据存储,好比微软的SQLServer,有本身的光标服务;而其余如微软的Access却没有光标服务。
当翻开一个纪录集时,必需选择是不是但愿数据存储办理光标,或是但愿OLEDB和ADO在当地为你办理光标。后者能够完成是由于OLEDB有其本人的光标服务。经由过程利用Connection工具或Recordset工具的CursorLocation属性能够设置这两个选项。能够设定该属性的值为:
·adUseServer:让数据存储办理光标。
·adUseClient:让ADO办理光标。
能够在翻开毗连或纪录集之前设置这个属性:
conPubs.CursorLocation=adUseServer
conPubs.OpenstrConn
大概:
rsAuthors.CursorLocation=adUseClient
rsAuthors.Open"authors",conPubs
缺省的光标是基于服务器的,了解这两品种型的区分十分主要。关于一个服务器光标来讲,数据存储的义务是办理纪录,以是,当利用服务器光标创建一个纪录集时,数据存储办理着纪录的挪动、纪录的更新等等。
关于一个客户光标,纪录集的全体内容复制给客户,受当地客户光标服务办理。这意味着关于一个客户光标,翻开一个具有大批纪录的纪录集要比利用基于服务器的光标翻开不异纪录集所消费的工夫长很多。也必要利用基于客户的光标的时分,在本书前面,研讨组件时,会看到更多的相干的例子。
3.“消防带”光标
你大概晓得“消防带”(Firehose)光标,因为能给使用程序带来高的运转效力,以是对其举行注释显得十分主要。由于“消防带”光标是一种特别范例的光标,只要在与微软的SQLServer毗连时才呈现。SQLServer创立用户哀求的数据集,然后把数据间接传给客户以使其尽量快地失掉数据。SQLServer本身几近没有光标办理,这意味着它能够更快地处置数据。也就是说数据能够在十分短的工夫内敏捷前往到客户端。从客户方看,范例于只许前移的光标。
那末,在后面会商光标范例时,为何没有触及到“消防带”光标呢?由于这类光标公用于SQLServer,并仅用于利用基于服务器的光标时。这不是一种真实的光标范例,取得一个“消防带”范例光标的办法就是不指定光标的范例。
8.4.2锁定
我们已注释了光标和怎样办理数据。如今能够创立纪录集了吗?生怕还不可,由于另有一个成绩没有会商,那就是锁定。
锁定就是怎样确保数据的完全性,确保变动不会被掩盖。我们必要制止的典范情形是屡次更新,好比一个用户修改了一些数据,接着另外一个用户当即又将其做了修正。为了对这类情形加以回护,要锁定纪录,有很多分歧的办法能够包管纪录失掉回护。可经由过程锁定范例来设置这些办法。
锁定范例
锁定范例决意更新纪录时纪录是不是或怎样被锁定。有四品种型的锁定:
·只读(adLockReadOnly):缺省锁定范例,纪录集是只读的,不克不及修正纪录。
·失望的(adLockPessimistic):当修正纪录时,数据供应者将实验锁定纪录以确保乐成地编纂纪录。只需编纂一入手下手,则当即锁住纪录。
·悲观的(adLockOptimistic):直到用Update办法提交更新纪录时才锁定纪录。
·批量悲观的(adLockBatchOptimistic):同意修正多个纪录,只要挪用UpdateBatch办法后才锁定纪录。
当不必要修改任何纪录时,应当利用只读的纪录集,如许供应者不必做任何检测。关于一样平常的利用,悲观的锁定多是最好的选择,由于纪录只被锁定一小段工夫,数据在这段工夫被更新。这削减了资本的利用。
失望的锁定进步了数据的完全性,但倒是以就义并发性为价值的。并发性是很多用户在统一工夫查阅数据的才能。锁定的纪录对其他用户是不成见的,因此数据的并发性下降了。悲观的锁定只在一小段工夫内锁定纪录,以是加强了数据的并发性,但同时其他用户修正数据的概率也增添了。
关于并发性和锁定的成绩在微软出书的《InsideSQLServer7.0》(作者RonSoukup和KalenDelaney)中做了较好的叙述。这是一本很有威望的专著,以是不管怎样应购置这本专著,该书有大批的有代价的材料。
8.4.3创立纪录集
创立一个纪录集非常简单,经由过程挪用Recordset工具的Open办法来完成:
Recordset.Open,,,,
其参数及申明如表8-3所示:
表8-3Open办法的参数及申明
比方,要翻开数据库pubs中authors表上的纪录集:
DimrsAuthors
SetrsAuthors=Server.CreateObject("ADODB.Recordset")
rsAuthors.Open"authors",strConn
Dosomethinghere
rsAuthors.Close
SetrsAuthors=Nothing
注重,有几个参数没有指定。实践上,一切的参数都是可选的,能够在翻开纪录集之前为它们设置响应的属性值:
DimrsAuthors
SetrsAuthors=Server.CreateObject("ADODB.Recordset")
WithrsAuthors
.Source="authors"
.ActiveConnection=strConn
.CursorType=adOpenForwardOnly
.LockType=adLockReadOnly
.Open
EndWith
Dosomethinghere
rsAuthors.Close
SetrsAuthors=Nothing
一旦翻开纪录集,以后指针主动位置于第一笔记录上。假如在纪录会合没有纪录,那末EOF和BOF属性都是True:
rsAuthors.Open"authors",strConn
IfrsAuthors.BOFandrsAuthors.EOFThen
Recordsetisempty
EndIf
1.Options参数
Open办法的Options参数同意指天命令文本内容。它能够是以下CommandTypeEnum常数之一:
·adCmdText:文本命令,好比SQL字符串。
·adCmdTable:表名。
·adCmdStoredProc:存储历程名。
·adCmdFile:保留的纪录集的文件名。
·adCmdTableDirect:表名。
·adCmdURLBind:URL地点。
adCmdTable与adCmdTableDirect的区分很小,假如想利用表中的全体列,利用adCmdTableDirect将因为ADO实行了某些外部优化而使运转速率变得稍快一些。
假如没有指天命令的范例,ADO必需推算出实行的命令的范例,这将招致分外的开支。
这里另有两个选项:adCmdUnspecified暗示没有指定范例;adCmdUnknow暗示命令的范例未知。一样平常地大概不会利用它们。
分外的选项
Options参数能够是以上常数中的任一个,但也能够到场以下ExecuteOptionEnum常数:
·adAsyncExcute:异步地实行命令。
·adAsyncFetch:获得初始的行集后,异步地猎取剩下的行。
·adAsyncFetchBlocking:除猎取纪录不制止命令运转之外,其他与adAsyncFetch类似。
·adExechteNoRecords:命令不前往任何纪录。
异步处置意味着在背景实行操纵,能够运转命令,然后持续其他事情,而不必要守候其实行终了(同步操纵)。当创立用户界面时,这显得出格便利,由于能够从命令实行中前往,向用户显现一些内容,而同时数据的猎取仍旧在背景举行。当前往纪录集时,这对ASP程序员来讲不是很有效,由于剧本言语不撑持ADO事务,以是纪录集什么时候已完成添补移没法得知。当处置更新、删除或拔出数据命令和不前往纪录集的时分,可使用异步操纵,即仅在不体贴了局的情形下才干利用。
在另外一方面,adExecuteNoRecords选项非常有效。它告知ADO实行的命令不前往任何数据。以是,就没有需要创立纪录集(总之,大概为空)。这会减速正在运转的更新或增加数据的查询操纵。
为了到场这些选项之一,可使用Or标记(同等于加号“+”)
adCmdStoredProcOradExecuteNoRecords
adCmdStoreProc+adExecuteNoRecords
鄙人一章,将看到对相干内容更具体的先容,由于这在处置命令(而不是纪录集)时会更有效。
2.在纪录会合挪动
一旦翻开一个纪录集,常常必要遍历每笔记录。这必要利用EOF属性。当抵达纪录集的开端时,EOF就变成True,由于能够如许创立一个轮回:
rsAuthors.Open"authors",strConn
WhileNotrsAuthors.EOF
Response.WritersAuthors("au_lname:)&","&_
rsAuthors("au_fname")&"<BR>"
rsAuthors.MoveNext
Wend
下面的例子一向轮回到EOF属性为True时才加入。MoveNext办法用于移到下一笔记录。
假如纪录集同意向后挪动,则可使用MovePrevious办法。在这类情形下,轮回中必要检测BOF属性值。别的分离另有挪动到第一条和最初一笔记录的MoveFirst和MoveLast办法:
rsAuthors.Open"authors",strConn,adOpenDynamic
Nowonfirstrecord
rsAuthors.MoveLast
Nowonlastrecord
rsAuthors.MovePrevious
rsAuthors.MovePrevious
Nowthreerowsfromtheendoftherecordset
rsAuthors.MoveFirst
Backatthebeginningagain
3.利用Fields汇合
Fields汇合包括纪录会合每字段(列)的Fields工具。Fields汇合是纪录集的缺省汇合,因而在会见字段时能够省略,就好像下面的While...Wend例子中的情形。因而,有多种会见字段的办法:
rsAuthors.Fields("au_lname").Value
rsAuthors("au_lname).Value
rsAuthors(1).Value
rsAuthors.Fields(1).Value
可使用字段名,或利用它在汇合中的地位。利用名字是最好的,由于如许将使代码更容易于保护。
Value属性是字段的缺省属性,因而也能够省略,好比:
rsAuthors("au_lname")
假如想遍历一切字段,可使用ForEach布局:
ForEachfldAuthorInrsAuthors.Fields
Response.WritefldAuthor.Name&":"&_
fldAuthor.Value&"<BR>"
Next
这个例子将打印每个字段的名字和值。
4.书签
当在纪录会合挪动时,大概必要保存纪录的地位,今后再移返来。同实在的书签类似,一个纪录集书签是一个指向单个纪录的独一的指针。
为了利用书签,只需将Bookmark属性值付与一个变量:
varBkmk=rsAuthors.Bookmark
然后,能够在纪录会合挪动,今后能够经由过程相反的命令将纪录移到做过书签标志的响应纪录上:
rsAuthors.Bookmark=varBkmk
在纪录会合查找纪录时,书签长短常有效的。在本章稍后的8.4.5节中有一个相干的例子。
注重,并不是一切纪录集都撑持书签,Supports办法(鄙人面会商)将能辨认其是不是撑持书签。
值得注重的主要一点是,不克不及超过分歧的纪录集利用书签,即便这些纪录集是不异的命令创立的。思索一下以下代码:
rsAuthors.Open"authors",strConn
rsAuthorsOther.Opne"authors",strConn
varBkmk=rsAuthors.Bookmark
varBkmkOther=rsAuthorsOther.Bookmark
只管两个纪录集是用不异的命令创立的,但纪录集的书签是纷歧样的。
可使用Clone办法取得可互换的书签,但在这里我们不会商它。
5.撑持的功效
如上所述,并不是一切的纪录集都撑持书签。另有很多其他的纪录集选项也不是被一切的供应者或纪录集范例撑持的,因而能够用Supports办法考证一下。
Supports办法利用一个或多个CursorOptionEnum值作为参数,前往True或False标明是不是撑持该选项。这些值的列表相称复杂,以是将其列于附录F中。
比方:
IfrsAuthors.Supports(adBookmark)Then
Therecordsetsupportsbookmarks
varBkMk=rsAuthors.Bookmark
EndIf
可使用Or或加号“+”组合多个常数:
IfrsAuthors.Supports(adBookmarkOradFind)Then
TherecordsetsupportsbookmarksanduseofFind
varBkMk=rsAuthors.Bookmark
EndIf
8.4.4过滤纪录集
过滤是一种临时地限制纪录会合可见纪录的一种办法。假如仅显现纪录会合的某些纪录,但又不必要每次都从头查询数据库,这类办法十分有效。
1.利用前提过滤
Filter属性具有多个参数,个中一个就是前提表达式,它十分像SQL中Where子句:
rsAuthors.Filter="state=ca"
这个语句限制纪录集只显现州名为ca的纪录。利用这个过滤前提将使以后指针回到第一条婚配纪录上。能够遍历纪录会合的全体纪录,而且只要婚配前提的纪录才可见。
不单单限于单一前提,还可使用And或Or把多个前提毗连在一同:
rsAuthors.Filter="au_lname=HomerOrau_lname=Francis"
这将过滤出姓为Francis或Homer的纪录。
下面的例子显现了一个列婚配一个值的过滤办法,也能够利用上面操纵符中的任何一种:
<:小于。
>:年夜于。
<=:小于即是。
>=:年夜于即是。
:不即是。
LIKE:通配符。
当利用经由过程配符操纵时,可使用“*”或“%”标记。比方:
rsAuthors.Filter="au_lnameLIKEHo%"
“*”或“%”作为一个通配符,婚配任何字符,因而下面的例子会婚配au_lname字段中以“Ho”字符入手下手的一切纪录。
可使用空字符串清空过滤前提,如许将显现全体纪录:
rsAuthors.Filter=""
2.利用常数过滤
Filter属性也能用FilterGroupEnum常数作为其参数:
·adFilterNone:清空以后过滤前提,与利用一个空字符串的效果不异。
·adeFilterPendingRecords:只显现那些已改动的,但还没送到服务器的纪录,只在成批更新形式下可用。
·adFilterAffectedRecords:只显现那些受上一次挪用Delete、Resync、UpdateBatch和CancelBatch办法影响的纪录。
·adFilterFetchedRecords:显现高速缓存中的纪录,即上一次挪用读取纪录的命令时的了局。
·adFilterConflictingRecords:显现在上一次成批更新中更新失利的纪录。
稍后会看到关于成批更新的先容。
3.利用书签过滤
最初一种过滤纪录集的办法是利用一个书签数组。可使用这个手艺创立一个纪录列表,然后再使用一个过滤前提对其过滤。比方:
rsAuthors.Open"authors",strConn,adOpenKeyset,_
adLockReadOnly,adCmdTableDirect
Savebookmarkforthefirstrecord
avarBkmk(0)=rsAuthors.Bookmark
Moveforwardtworecords
rsAuthors.MoveNext
rsAuthors.MoveNext
Savebookmarkforthethirdrecord
avarBkmk(1)=rsAuthors.Bookmark
Movetotheendandsavethebookmark
rsAuthors.MoveLast
avarBkmk(2)=rsAuthors.Bookmark
Nowapplythefilter
rsAuthors.Filter=Array(avarBkmk(0),avarBkmk(1),avarBkmk(2))
Nowloopthroughtherecordset
WhileNotrsAuthors.EOF
Response.WritersAuthors("au_lname")&"<BR>"
rsAuthors.MoveNext
Wend
当轮回至纪录集开端地位时,会发明只要三笔记录,由于只要三个书签使用于过滤前提。
注重,不克不及间接利用数组avarBkmk,必需利用Array函数将各个书签转换成分歧的数组。
8.4.5查找纪录
查找单个的纪录由Find办法来完成。它相似于利用前提的过滤办法:
rsAuthors.Find"au_lname=Lloyd"
它们之间最次要的区分在于这类办法只能有一个前提,不同意利用And或Or。
可使用可选的参数指定一些分外的选项,其完全的语法以下:
Recordset.FindCriteria,,,
SkipRows是一个数字,暗示在入手下手查找纪录前跳过的行数。缺省为0,查询从以后行入手下手。
SearchDirection能够是adSearchForward,暗示向前搜刮纪录;大概adSearchBackward,暗示向后搜刮纪录。
Start是一个书签,指出入手下手查找纪录的地位。
假如翻开响应的纪录,以后指针将位于婚配的纪录上,假如没有找到纪录,那末将位于上面两个地位中的一个:
·假如是向前搜刮,则位于纪录集开端地位的前面,EOF被设置为True。
·假如是向后搜刮,则位于纪录集入手下手地位的后面,BOF被设置为True。
利用书签保留地位
假如没有找到响应的纪录,纪录的从头定位能够由书签轻松办理,由于能够为以后地位制造书签,假如在查找纪录过程当中没有找到所需的纪录,那末再移回到前次保留的地位。
比方:
Savethecurrentposition
varBkmk=rsAuthors.Bookmark
Findtherecord
rsAuthors.Find"au_lname=Sussman"
Wasitfound
IfNotrsAuthors.EOFThen
Response.Write"Found:"&rsAuthors("au_lname")&","&_
rsAuthors("au_fname")&"<BR>"
Else
Response.Write"Notfound.Moving<BR>"
rsAuthors.Bookmark=varBkmk
EndIf
利用Filter属性强于Find办法的一个缘故原由是Find语句只能一个查询前提,而Filter属性同意指定多个前提。也就是说,当想要查找的字段前提不止一个时,不克不及利用Find办法。但是,能够先过滤纪录,假如找到纪录能够再删除过滤前提。
8.4.6修正纪录
年夜部分的Web只用来显现信息,而Web使用程序正变得愈来愈广泛。在这类情况下,假如只具有只读数据的确没有甚么用途。创立一个使用程序,几近老是必要修正现存的数据或是增加新的数据,其办法有很多。在本节,将进修怎样利用Recordset工具的办法来变动数据。鄙人一章,将会看到怎样利用查询完成不异的义务。
能够设置除adLockReadOnly的地方的锁定范例共同利用Recordset工具的办法往修正数据(假定有响应的权限)。记着,缺省的锁定范例是只读的。
1.增加纪录
要在纪录会合增加纪录,利用AddNew办法。有两种利用AddNew的办法。第一种没有任何参数,仅仅挪用AddNew,在纪录集的最初增加一个空纪录。在挪用Update办法保留所做的变动之前,能够随便地修正字段中的数据:
WithrsAuthors
.Open"authors",strConn,adOpenDynamic,_
adLockOptimistic,adCmdTableDirect
.AddNew
.Fields("au_id")="123-12-1234"
.Fields("au_lname")="Lloyd"
.Fields("au_fname")="Janine"
.Fields("contract")=0
.Update
EndWith
这只是增加了一条新纪录,设置四个强迫型的字段值。
另外一种办法是利用AddNew办法的可选参数,这是两个数组,一个是字段名,另外一个是字段的值。
WithrsAuthors
.Open"authors",strConn,adOpenDynamic,_
adLockOptimistic,adCmdTableDirect
.AddNewArray("au_id","au_lname","au_fname","contract"),_
Array("123-12-1234","Lloyd","Janine",0)
EndWith
这个办法不必要挪用Update办法。
2.编纂纪录
编纂纪录与增加纪录的办法类似,分歧的地方在于不必要挪用AddNew办法:
strSQL="SELECT*FROMauthors"&_
"WHEREau_lname=Lloyd"
WithrsAuthors
.OpenstrSQL,strConn,adOpenDynamic,_
adLockOptimistic,adCmdText
.Fields("contract")=1
.Update
EndWith
这仅仅是将以后纪录(在这类情形下是第一笔记录,由于方才翻开纪录集)的contract字段的值赋为1。
3.删除纪录
删除纪录需挪用Delete办法。删除哪一笔记登科决于可选的参数,能够是上面AffectEnum常数中的一个:
·adAffectCurrent:删除以后纪录,缺省操纵。
·adAffectGroup:删除婚配以后过滤前提的一切纪录。
·adAffectAll:删除纪录会合的全体纪录。
·adAffectAllChapters:删除一切段(chapter)中的纪录。
最复杂的挪用情势是:
rsAuthors.Delete
这将删除以后纪录。假如有一个过滤前提,并想删除一切婚配该前提的纪录,那末仅需加上得当的常数:
rsAuthors.DeleteadAffectGroup
4.主动递增的字段
当增加一条新纪录时,一样平常会碰着如许一个成绩:怎样处置那些主动递增的或标识字段(IdentityFiled)。这些字段是由服务器主动更新的数字字段,一样平常用于为每行供应一个独一的字段值。当数据库含有多个表时,那末这个独一的字段常常被看成联系关系表的外键。以是,增加一条新纪录时,常常必要找出它们的值。
比方,思索一下有两个字段的表,一个主动递增的ID字段(SQLServer中的IDENTITY字段或Access中的AutoNumber字段),一个字段名为Name的文本字段。如今思索一下上面的向表中增加纪录的代码:
WithrsData
.Open"tblTest",adOpenDynamic,adLockOptimistic,adCmdTableDirect
.AddNew
.Fields("Name")="Janine"
.Update
intID=.Fields("ID")
EndWith
看上往很寻常,但增加纪录后是不是可以取到这个值依附于光标的范例、锁定的范例和ID字段是不是被索引。表8-4列出了哪些组合同意猎取新拔出的ID字段的值。其他没有列在表中的组合不克不及前往ID字段的值。
表8-4猎取ID字段的值与光标、锁定的范例及ID字段是不是被索引的干系
这分明地申明必需利用准确的组合,才干包管能获得ID字段的准确值。不然,大概会失掉0、空值或NULL,这取决于组合的体例。鄙人一章中处置存储历程时,将见到另外一种从SQLServer猎取IDENTITY字段值的办法。
国内有些大的CRM厂商的ASP就写得不错.无论是概念还是它里面用JAVASCRIPT的能力.并不是说现在的程序员用了ASP.NET来写程序就可以说自己高档了 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。 如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
页:
[1]