基於AC資料庫,本來做來是每次都要更新資料庫的顯示次數到資料庫的。但實踐證明,上了140的線上量該位置就要報衝突錯誤了。後台就改寫成如下方式放到application中,每n分鐘或其中的1個BANNER顯示完畢觸發向資料庫中更新,實踐證明效率大大滴好了轉。以前經過實踐推敲的好些代碼,現在而今眼目下都不用了。慢慢貼出來吧。自己看代碼建立相應表。及後台。
Call BannerDisPlay()
Sub BannerDisPlay()
Dim ArrBanner,ArrLen,BannerData,PRVDBSTATE
BannerData = Application("BannerData")
ArrLen = UBound(BannerData)
If ArrLen = 0 Then
Response.Write "該廣告位沒有資料"
Exit Sub
Else
Dim b
Randomize
b = Int((ArrLen * Rnd))
If BannerData(b,7) = False Then
Response.Write "<a href='BanenrGo.asp?ID="&BannerData(b,0)&"' target='_blank'><img src='"& BannerData(b,2) &"' width='468' height ='60' border='0'></a>"
Else
Response.Write(BannerData(b,6))
End If
If Application("BannerData")(b,5) - BannerData(b,4) > 1 Then
If DBSTATE = False Then
DbOpen()
PRVDBSTATE = True
End If
Dim cs
Conn.Execute("update [AD_Banner] set DisTimes="& BannerData(b,5)+1 &",EndDate=now,HasOver=True where ADID="& BannerData(b,0))
Set cs = Server.CreateObject("ZKXP.Cash")
Set cs.Conn = Conn
Application.Lock()
cs.LoadBannerData
Application.UnLock()
Set cs = nothing
'Response.Write "<b>reload</b><br>"
Else
BannerData(b,5) = BannerData(b,5) + 1
Application.Lock()
'Response.Write "<br>addOneID="& BannerData(b,0) &"<br>"
'Response.Write "存入之前顯示AP="&Application("BannerData")(b,5)&"Arr="&BannerData(b,5)&"<br>"
Application("BannerData") = BannerData
'response.Write "存入之後顯示AP="& Application("BannerData")(b,5) &"<br>"
Application.UnLock()
End If
If DateDiff("n",Application("BannerDataSaveDate"),now) >= SBDtDif Then'SBDtDif變數定義在UserBin
Application.Lock()
Application("BannerDataSaveDate") = now
Application.UnLock()
Dim i
If DBSTATE = False Then
DbOpen()
PRVDBSTATE = True
End If
for i = 0 to uBound(Application("BannerData")) - 1
Conn.Execute("update [AD_Banner] set DisTimes="&Application("BannerData")(i,5)&" where ADID="&Application("BannerData")(i,0))
next
End If
End If
If PRVDBSTATE = True Then DbClose()
BannerData = null
End Sub