马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大家可以自己去看一看.可以说看得想呕吐.以前有次下了个动网来看.里面连基本内置函数的保护措施(函数没防御性)都没有.难怪经常补这个补那个了.可能现在.NET版会好点吧2000-08-05・青苹果电脑事情室・Yesky
一样平常我们在web或别的有关的无形态使用中利用组件时,剧本运转终了后我们城市丧失组件的一切参照。固然能够复杂地将组件的参照保留在会话(session)变量中,但这华侈资本。更伶俐的办法是用会话变量或隐式表单标签保留组件的一些信息。当从头制造组件的实例时,试图用保留在会话变量中的信息恢复组件的形态。但两种办法的坏处都在于:从资本的角度来看过于高贵,乃至刚好难以完成。
很侥幸有个好动静。我们都晓得可延续性的全部条件是可以将变量恢复到如许的形态,以致于组件晓得在前次的例示中它在哪。这有助于组件如今往做它假定要做的。这个计划的一个典范例子是网页上材料的翻页。当用户点击PageDown时,我们必要晓得我们在前一页的地位。不把变量保留在内存中(如会话变量),假如我们能将它们保留在文件中,等今后必要时检索不是会很好吗?用基本的数据情势(字符串与数字)保留数据很简单。用工具和数组会如何呢?工具和数组实质上是存储器中的二进制数据流。假如我们能读这个数据我们就可以将它写进文件以便今后的检索。关于工具有个好注重。只管数组的情形分歧。起首你不克不及用数组做组件的属性(VB6.0)。你能够用他们做变量,但今后你会碰着路障。侥幸地是我们为这类情形发明了一个事情区。
你能够将一切或部分属性保留在一个PropertyBag工具中。PropertyBag工具把持在一个工具挪用过程当中能够保留和恢复的信息。PropertyBag工具的内容(Content)属性供应你任何存在组中的二进制数据流。由你来将这些二进制数据流写进文件中以便往后的检索。
实例:
好比你有一个类MyComp.clsMyDept,它有两个属性MyDepartment$和MyEmployees(一个ADO纪录集工具)。
以下是这个类模块的代码:
OptionExplicit
OptionCompareText
PublicMyDepartmentAsString
PublicMyEmployeesAsADODB.Recordset
DimobjBagAsNewPropertyBag
PrivateSubClass_InitProperties()
SetMyEmployees=NewADODB.Recordset
MyEmployees.Fields.Append"EmpName",adVarChar,30
MyEmployees.Fields.Append"EmpSal",adCurrency
MyEmployees.Open
EndSub
PublicSubSaveMyProperties()
DimintFile%,bytRec()AsByte
objBag.WriteProperty"MyDepartment",MyDepartment
objBag.WriteProperty"MyEmployees",MyEmployees
Savethisdatainafileforlaterretrieval
intFile=FreeFile
IfDir("C:MyData.txt",vbNormal)=""Then
Else
Kill"C:MyData.txt"
EndIf
Open"C:MyData.txt"ForBinaryAccessWriteAs#intFile
bytRec=objBag.Contents
Put#intFile,,bytRec
Close#intFile
EndSub
PublicSubRestoreMyProperties()
DimintFile%,bytRec()AsByte
Readthesaveddatafromthefile.
ReDimbytRec(FileLen("C:MyData.txt"))
intFile=FreeFile
Open"C:MyData.txt"ForBinaryAccessReadAs#intFile
Get#intFile,,bytRec
objBag.Contents=bytRec
Close#intFile
PropertBagrestored.Letsrestorethepropertiesnow.
MyDepartment=objBag.ReadProperty("MyDepartment")
SetMyEmployees=objBag.ReadProperty("MyEmployees")
EndSub
在客户使用中保留属性
PrivateSubCommand1_Click()
DimobjDeptAsNewMyComp.clsMyDept
objDept.MyDepartment="Research"
Addoneemployee
objDept.MyEmployees.AddNew
objDept.MyEmployees!EmpName="Harry"
objDept.MyEmployees!EmpSal=2500
objDept.MyEmployees.Update
Addsecondemployee
objDept.MyEmployees.AddNew
objDept.MyEmployees!EmpName="Potter"
objDept.MyEmployees!EmpSal=3000
objDept.MyEmployees.Update
Savethepropertiesbycallingthemethodfromourcomponent
objDept.SaveMyProperties
SetobjDept=Nothing
EndSub
取回保留的属性
PrivateSubCommand2_Click()
DimobjDeptAsNewMyComp.clsMyDept
Restorepropertiesbycallingthemethodfromourcomponent
objDept.RestoreMyProperties
Letsseewhatisrestored
Debug.PrintobjDept.MyDepartmentWillprintResearch
objDept.MyEmployees.MoveFirst
Debug.Print""&objDept.MyEmployees!EmpNameWillprintHarry
objDept.MyEmployees.MoveNext
Debug.Print""&objDept.MyEmployees!EmpNameWillprintPotter
SetobjDept=Nothing
EndSub
先别冲动,你在本人的使用中运转这个酷件之前,必需懂得它的范围性。用于保留的工夫取决于属性的巨细和数据范例。注重年夜部分工夫用在ReadProperty和WriteProperty中。缘故原由很复杂,当我们处置象ADO纪录集如许的布局型数据时,历程可不象拷贝字撙节那样复杂。数据也得被注释。
保留纪录集时我察看到以下情形:
1、保留100,000行每列有25个字符的纪录集用了50秒。
2、检索一样的数据用了20秒。
有个更好的办法保留纪录集工具。他们有本人的Save办法。用Save办法保留100,000个纪录集仅用了6秒。用Open办法检索保留的纪录集工具,从保留的纪录集工具中检索100,000行用了20秒(与PropertyBag办法的工夫一样)
选择利用数组
延续的ADO纪录集为在你的使用中利用数组供应了一个好办法。想一想,假如你利用起来你就有一切ADO的烦琐办法可使用,象FIND,SORT,FILTER等等。实践上,假如你察看细心,会发明我们在上述实例顶用延续的纪录集完成了职工纪录的数组。纯实际化的人大概会否决,由于你不能不在你的计划中包括ADO,而这将增添你散布磁盘的大批存储。
小结
在Web类的无形态使用中组件的可延续性长短常主要的功效。利用PropertyBag工具保留和检索属性。关于纪录集工具分离利用ADO的Save和Open办法保留和检索数据。将上述例子作为摸板,给每个实例加上变量文件名就能够制造你本人的组件。
</p>ActiveServerPage技术为应用开发商提供了基于脚本的直观、快速、高效的应用开发手段,极大地提高了开发的效果。在讨论ASP的安全性问题之前,让我们来看看ASP是怎么工作的。 |