-
คลาสแคช Rem xml
'------------------------------------------------ - ------------------
'โปรดเก็บข้อมูลลิขสิทธิ์ไว้เมื่อพิมพ์ซ้ำ
'ผู้เขียน: ╰⑥月の雨╮
'เวอร์ชัน: เวอร์ชัน 1.0
'คลาสนี้ใช้คลาสแคชข้อมูล walkmanxml บางส่วน ซึ่งสะดวกกว่าในการใช้งาน ยินดีต้อนรับสู่การสื่อสารและสร้างความก้าวหน้า
'------------------------------------------------ - ------------------
คลาส XmlCacheCls
m_DataConn ส่วนตัว 'แหล่งข้อมูลต้องเปิดอยู่'
m_CacheTime ส่วนตัว 'เวลาแคช เป็นวินาที ค่าเริ่มต้นคือ 10 นาที
เส้นทาง xml ของ m_XmlFile ส่วนตัว ใช้ที่อยู่ที่แน่นอน ไม่ต้องใช้ส่วนขยาย
คำสั่ง SQL 'm_Sql ส่วนตัว
ส่วนตัว m_SQLArr '(อ่านอย่างเดียว) ส่งคืนอาร์เรย์ข้อมูล
Private m_ReadOn '(อ่านอย่างเดียว) ส่งกลับ
คุณสมบัติของโหมดการอ่าน 1-database 2-xml สำหรับการตรวจหา ========================== ==============
'แหล่งข้อมูล'
ชุดทรัพย์สินสาธารณะ Conn(v)
ตั้งค่า m_DataConn = v
สิ้นสุดคุณสมบัติ
ทรัพย์สินสาธารณะ Get Conn
Conn = m_DataConn
สิ้นสุดคุณสมบัติ
'เวลาแคช
ทรัพย์สินสาธารณะให้ CacheTime (v)
m_CacheTime = v
สิ้นสุดคุณสมบัติ
ทรัพย์สินสาธารณะรับ CacheTime
แคชไทม์ = m_CacheTime
เส้นทาง xml ของ
คุณสมบัติสิ้นสุด
ใช้ที่อยู่ที่แน่นอน
ทรัพย์สินสาธารณะให้ XmlFile (v)
m_XmlFile = v
สิ้นสุดคุณสมบัติ
ทรัพย์สินสาธารณะ GetXmlFile
XmlFile = m_XmlFile
สิ้นสุดคุณสมบัติ
'คำสั่ง SQL
ทรัพย์สินสาธารณะให้ Sql (v)
m_Sql = โวลต์
สิ้นสุดคุณสมบัติ
ทรัพย์สินสาธารณะรับ SQL
ตรรกกะ = m_Sql
สิ้นสุดคุณสมบัติ
'ส่งคืนอาร์เรย์บันทึก
ทรัพย์สินสาธารณะรับ SQLArr
SQLArr = m_SQLArr
สิ้นสุดคุณสมบัติ
'กลับสู่โหมดการอ่าน'
ทรัพย์สินสาธารณะรับ ReadOn
ReadOn = m_ReadOn
คุณสมบัติสุดท้าย
'การทำลายคลาส===========================================
ส่วนตัวย่อย Class_Initialize() 'เริ่มต้นคลาส
m_CacheTime=60*10 'เวลาแคชเริ่มต้นคือ 10 นาที
End Sub
Private Sub Class_Terminate() 'ปล่อยคลาส
End Sub
' วิธีการสาธารณะของคลาส ================================= ========
Rem อ่านข้อมูล
ฟังก์ชั่นสาธารณะ ReadData
ถ้า FSOExistsFile(m_XmlFile) ดังนั้น 'มีแคช Xml อยู่ ให้อ่านโดยตรงจาก xml
อ่าน DataFromXml
m_ReadOn=2
อื่น
อ่านข้อมูลจากDB
m_ReadOn=1
สิ้นสุดถ้า
ฟังก์ชั่นสิ้นสุด
Rem เขียนข้อมูล XML
ฟังก์ชั่นสาธารณะ WriteDataToXml
ถ้า FSOExistsFile(m_XmlFile) ให้ 'ออกโดยตรงถ้า xml ยังไม่หมดอายุ'
หากไม่ใช่ isXmlCacheExpired(m_XmlFile,m_CacheTime) ให้ออกจากฟังก์ชัน
สิ้นสุดถ้า
หรี่แสง
Dimxmlเนื้อหา
ดิม เค
xmlcontent = ""
xmlcontent = xmlcontent & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbnewline
xmlcontent = xmlcontent & " <root>" & vbnewline
เค=0
ตั้งค่า Rs = Server.CreateObject("Adodb.Recordset")
Rs.เปิด m_sql,m_DataConn,1
ในขณะที่ไม่ใช่ rs.eof
xmlcontent = xmlcontent & " <รายการ"
สำหรับแต่ละฟิลด์ใน rs.Fields
xmlcontent = xmlcontent & field.name & "=""" & XMLStringEnCode(field.value) & """ "
ต่อไป
rs.movenext
เค=เค+1
xmlcontent = xmlcontent & "></item>" & vbnewline
เวนด์
฿.ปิด
Setrs=ไม่มีอะไร
xmlcontent = xmlcontent & " </root>" & vbnewline
Dim เส้นทางโฟลเดอร์
folderpath = ตัดแต่ง (ซ้าย (m_XmlFile, InstrRev (m_XmlFile,"")-1))
โทร CreateDIR(folderpath&"") 'สร้างโฟลเดอร์
WriteStringToXMLFile m_XmlFile,xmlcontent
สิ้นสุดฟังก์ชัน
'วิธีการส่วนตัวของคลาส==========================================
Rem จากข้อมูลการอ่านไฟล์ Xml
ฟังก์ชั่นส่วนตัว ReadDataFromXml
หรี่ SQLARR() 'Array
Dim XmlDoc 'วัตถุ XmlDoc
Dim objNode 'โหนดลูก'
Dim ItemsLength 'ความยาวของโหนดลูก'
Dim AttributesLength 'ความยาวของแอตทริบิวต์โหนดลูก
ตั้งค่า XmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.Async=เท็จ
XmlDoc.Load(m_XmlFile)
ตั้งค่า objNode=XmlDoc.documentElement 'รับโหนดรูท
ItemsLength=objNode.ChildNodes.length 'รับความยาวของโหนดย่อย
สำหรับ items_i=0 ถึง ItemsLength-1
AttributesLength=objNode.childNodes(items_i).Attributes.length 'รับความยาวของแอตทริบิวต์โหนดย่อย
สำหรับ Attributes_i=0 ถึง AttributesLength-1
ReDim รักษา SQLARR (AttributesLength-1,items_i)
SQLArr(Attributes_i,items_i) = objNode.childNodes(items_i).Attributes(Attributes_i).Nodevalue
ต่อไป
ต่อไป
ตั้ง XmlDoc = ไม่มีเลย
m_SQLArr = SQLARR
End Function
Rem อ่านข้อมูลจากฐานข้อมูล
ฟังก์ชั่นส่วนตัว ReadDataFromDB
หรี่แสง
DimSQLARR()
ดิม เค
เค=0
ตั้งค่า Rs = Server.CreateObject("Adodb.Recordset")
Rs.เปิด m_sql,m_DataConn,1
ถ้าไม่ใช่ (rs.eof และ rs.bof) จากนั้น
ในขณะที่ไม่ใช่ rs.eof
ขาสนามสลัว
fieldlegth = rs.Fields.count
ReDim รักษา SQLARR (fieldlegth, k)
ดิม ฟิลด์ดิ
สำหรับ fieldi = 0 ถึง fieldlegth-1
SQLArr(fieldi,k) = rs.Fields(fieldi).value
ต่อไป
rs.movenext
เค=เค+1
เวนด์
สิ้นสุดถ้า
฿.ปิด
Setrs=ไม่มีอะไร
m_SQLArr = SQLArr
ฟังก์ชันสิ้นสุด
'วิธีการส่วนตัวเสริมของคลาส========================================= ==
Rem เขียนไฟล์ xml
WriteStringToXMLFile ส่วนตัวย่อย (ชื่อไฟล์, str)
ติ่มซำ fs,ts
ตั้งค่า fs= createobject("scripting.filesystemobject")
ถ้าไม่ใช่ IsObject(fs) ให้ออกจาก Sub
ตั้งค่า ts=fs.OpenTextFile(ชื่อไฟล์,2,จริง)
ts.writeline(str)
ts.ปิด
ตั้งค่า ts=ไม่มีอะไร
ตั้งค่า fs=ไม่มีอะไร
End Sub
Rem กำหนดว่าแคช xml หมดอายุหรือไม่
ฟังก์ชั่นส่วนตัว isXmlCacheExpired (ไฟล์, วินาที)
ไฟล์ติ่มซำครั้งล่าสุด
filelasttime = FSOGetFileLastModifiedTime (ไฟล์)
ถ้า DateAdd("s",วินาที,filelasttime) < ตอนนี้แล้ว
isXmlCacheExpired = จริง
อื่น
isXmlCacheExpired = เท็จ
สิ้นสุดถ้า
End Function
Rem ได้รับเวลาแก้ไขล่าสุดของไฟล์
ฟังก์ชั่นส่วนตัว FSOGetFileLastModifiedTime (ไฟล์)
หรี่ fso,f,s
ตั้งค่า fso=CreateObject("Scripting.FileSystemObject")
ตั้งค่า f=fso.GetFile(ไฟล์)
FSOGetFileLastModifiedTime = f.DateLastModified
เซต f = ไม่มีเลย
ตั้งค่า fso = ไม่มีเลย
End Function
Rem หรือไม่
ฟังก์ชั่นสาธารณะ FSOExistsFile (ไฟล์)
ติ่มซำ
ตั้งค่า fso = Server.CreateObject("Scripting.FileSystemObject")
ถ้า fso.FileExists(file) แล้ว
FSOExistsFile = จริง
อื่น
FSOExistsFile = เท็จ
สิ้นสุดถ้า
ตั้งค่า fso = ไม่มีเลย
สิ้นสุดฟังก์ชัน
Rem อักขระหลีก xml
ฟังก์ชั่นส่วนตัว XMLStringEnCode(str)
ถ้า str&"" = "" ดังนั้น XMLStringEnCode="":Exit Function
str = แทนที่ (str,"<",<")
str = แทนที่ (str,">",">")
str = แทนที่ (str,"', "'")
str = แทนที่ (str,""",""")
str = แทนที่ (str,"&","&")
XMLStringEnCode = STR
สิ้นสุดฟังก์ชัน
Rem สร้างโฟลเดอร์
ฟังก์ชั่นส่วนตัว CreateDIR (byval LocalPath)
เมื่อเกิดข้อผิดพลาด ดำเนินการต่อต่อไป
หรี่ฉัน, FileObject, patharr, path_level, pathtmp, cpath
LocalPath = แทนที่ (LocalPath,"", "/")
ตั้งค่า FileObject = server.createobject("Scripting.FileSystemObject")
patharr = แยก(LocalPath,"/")
path_level = UBound(พาธาร์)
สำหรับ i = 0 ถึง path_level
ถ้า i=0 แล้ว
pathtmp=patharr(0) & "/"
อื่น
pathtmp = pathtmp & patharr(i) & "/"
สิ้นสุดถ้า
cpath = ซ้าย (pathtmp, len (pathtmp) -1)
ถ้าไม่ใช่ FileObject.FolderExists(cpath) จากนั้น
'Response.write cpath'
FileObject.CreateFolder cpath
สิ้นสุดถ้า
ต่อไป
ตั้งค่า FileObject = ไม่มีเลย
ถ้า err.number<>0 แล้ว
CreateDIR = เท็จ
ผิดพลาด เคลียร์
อื่น
CreateDIR = จริง
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
จบคลาส
'ตั้งค่าแคช
ฟังก์ชั่น SetCache (xmlFilePath, CacheTime, Conn, Sql)
ตั้งค่าแคช = XmlCacheCls ใหม่
ตั้งค่า cache.Conn=Conn
cache.XmlFile=xmlFilePath
cache.Sql=Sql
cache.CacheTime=แคชไทม์
แคช WriteDataToXml
ตั้งค่าแคช = ไม่มีอะไรเลย
ฟังก์ชันสิ้นสุด
'อ่านแคช
ฟังก์ชั่น ReadCache (xmlFilePath, Conn, Sql, ByRef ReadOn)
ตั้งค่าแคช = XmlCacheCls ใหม่
ตั้งค่า cache.Conn=conn
cache.XmlFile=xmlFilePath
cache.Sql=Sql
แคช ReadData
ReadCache=แคช.SQLArr
ReadOn=แคชReadOn
ฟังก์ชันสิ้นสุด
-
การใช้งาน:
1 ข้อมูลแคชเป็น xml
รหัส:
รหัสโปรแกรม
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
-
ตั้งค่าแคช = XmlCacheCls ใหม่
ตั้งค่า cache.Conn=conn
cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
cache.Sql="เลือก 15 อันดับแรก prod_id,prod_name,prod_uptime จาก tblProduction"
แคช WriteDataToXml
-
2 รหัสเพื่ออ่านข้อมูลแคช
:
รหัสโปรแกรม
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
-
ตั้งค่าแคช = XmlCacheCls ใหม่
ตั้งค่า cache.Conn=conn
cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
cache.Sql="เลือก 15 อันดับแรก prod_id,prod_name,prod_uptime จากลำดับการผลิต tbl โดย prod_id asc"
แคช ReadData
rsArray=แคช.SQLArr
ถ้า isArray(rsArray) แล้ว
สำหรับ i=0 ถึง ubound(rsArray,2)
สำหรับ j=0 ถึง ubound(rsArray,1)
การตอบสนองเขียน(rsArray(j,i)&"<br><br>")
ต่อไป
ต่อไป
สิ้นสุดถ้า
-
เวลาแคช หน่วยเริ่มต้นคือ 10 นาทีในหน่วยวินาที คุณสามารถตั้งค่า cache.CacheTime=60*30 30 นาทีได้ด้วยตัวเอง