关于网上流行的缓存类提示错误 '80040001' 的解决办法

今天看了一下原来是类中有bug,程序员思维不够严谨导致的错误,这个错误并非在所有服务器上都出现,这一点与服务器的IIS解析能力有关,但是不管是否提示错误,bug固然存在,只是出错时间早晚的问题,以下是我修改的无错版缓存类:

<%
'作用:缓存和缓存管理类
'公有变量:OutTimes 过期时间(单位为分钟)缺省值为14400
'CacheName 缓存组的总名称,缺省值为"Seven",如果一个站点中有超过一个缓存组,则需要外部改变这个值。
'属性:Name 定义缓存对象名称,只写属性。
'属性:value 读取和写入缓存数据。
'函数:ObjIsEmpty()判断当前缓存是否过期。
'方法:DelCahe(MyCaheName)手工删除一个缓存对象,参数是缓存对象的名称。
Class DoCache
Public OutTimes,CacheName
Private LocalCacheName,CacheData,DelCount
Private Sub Class_Initialize()
   OutTimes=14400
   CacheName="Seven"
End Sub
Private Sub SetCache(SetName,NewValue)
   Application.Lock
   Application(SetName) = NewValue
   Application.unLock
End Sub
Private Sub makeEmpty(SetName)
   Application.Lock
   Application(SetName) = Empty
   Application.unLock
End Sub
Public Property Let Name(ByVal vNewValue)
   LocalCacheName=LCase(vNewValue)
End Property
Public Property Let Value(ByVal vNewValue)
   If LocalCacheName<>"" Then
    CacheData=Application(CacheName&"_"&LocalCacheName)
    If IsArray(CacheData) Then
     CacheData(0)=vNewValue
     CacheData(1)=Now()
    Else
     ReDim CacheData(2)
     CacheData(0)=vNewValue
     CacheData(1)=Now()
    End If
    SetCache CacheName&"_"&LocalCacheName,CacheData
   Else
    Err.Raise vbObjectError + 1, "
www.7di.net", " please change the CacheName."
   End If
End Property
Public Property Get Value()
   If LocalCacheName<>"" Then
    CacheData=Application(CacheName&"_"&LocalCacheName)
    If IsArray(CacheData) Then
     Value=CacheData(0)
    Else
     Err.Raise vbObjectError + 1, "
www.7di.net", " The CacheData Is Empty."
    End If
   Else
    Err.Raise vbObjectError + 1, "
www.7di.net", " please change the CacheName."
   End If
End Property
Public Function ObjIsEmpty()
   ObjIsEmpty=True
   CacheData=Application(CacheName&"_"&LocalCacheName)
   If Not IsArray(CacheData) Then
    ObjIsEmpty=False
    Exit Function
   End If  
   If Not IsDate(CacheData(1)) Then
    ObjIsEmpty=False
    Exit Function
   End If
   If DateDiff("s",CDate(CacheData(1)),Now()) > 60*OutTimes Then ObjIsEmpty=False
End Function
Public Sub DelCahe(MyCaheName)
   makeEmpty(CacheName&"_"&MyCaheName)
End Sub
End Class

'调用方式

Set MyCache=New DoCache
MyCache.OutTimes=0.5     '定义过期时间(以分钟为单会)
MyCache.Name="testcaches"    '定义缓存名
IF MyCache.ObjIsEmpty() Then   '判断是否可用(包括过期,与是否为空值)
Response.write "输出的内容是缓存后的数据:"&MyCache.Value
Else
BoardJumpList="xxx"
MyCache.Value=BoardJumpList '写入内容
Response.write "输出的内容是未缓存的数据:"&BoardJumpList
End if

'MyCache.DelCahe("testcaches") '用来清理缓存
%>


原文地址:https://www.cnblogs.com/see7di/p/2239935.html