一個很常見的ASP 問題: 如何定時工作流程執行網頁?, 之所以會問這個問題大部分是因為管理員可能會利用一個ASP 網頁來作數據庫維護的動作, 如備份...等, 在Windows NT平台有一個方法可以做工作流程, 那就是AT 指令+ Schedule 服務, 但很可惜的是你並沒有法度在命令列(Command-Line) 執行ASP 網頁
當然你可以在命令列執行IE 並告訴它要求執行的網頁, 例如: c:/program files/internet explorer/iexplore.exe http://localhost/mypage.asp, 不過, 這絕對不是大部分的網站管理者所要的方法, 因為這必須要開啟瀏覽器, 花費許多的系統資源, No Good! 此外, 還有一個缺點, 那就是執行ASP 網頁有逾時時間(Timeout), 如果你要執行許多的流程工作, 你可能要更改Timeout 時間, 哇! 太麻煩! No good!
在這一篇文章要介紹的是使用WSH (Windows scripting Host) 的解決方案。
WSH 的安裝
Windows 98, Windows 2000, IIS 4.0 已包含WSH ,WSH 包含在IE 5.0 版本中,如果你是Windows 95 使用者, 可以到微軟網站下載個別安裝程序http://www.microsoft.com/msdownload/vbscript/ scripting.asp 。
範例
假設你現在有一個廣告輪撥系統, 你想將檢查廣告到期日這件工作自動化每天凌晨執行, 也就是當一則廣告過期了, 便將其廣告狀態更改為停用, 我們先來看看資料表AdInfo 字段。
AdId 廣告代碼Int
AdName 廣告名稱VarChar(64)
ValidToDate 廣告到期日DateTime
AdStatus 廣告狀態Int (0為停用, 1為進行)
先看看ASP 怎麼做
接下來看看如何用WSH, 基本上和ASP 的寫法是一樣的除了不需加上ASP 分隔符存盤的擴展名為.vbs 。
由於不是使用asp.dll , 因此沒有ASP 的對像模式並不適用
利用WSH 作定時工作流程
2001-07-15・ ・不詳・・
上一頁1 2 3
'請勿用Server.CreateObject
Set oConn = CreateObject(Adodb.Connection)
oConn.Open YourConnString
sSQL = update AdInfo set AdStatus=0 _
& where ValidToDate<=' & Date & '
oConn.Execute(sSQL)
oConn.Close
Set oConn = Nothing
存為c:/scripts/updateadstatus.vbs, WSH 有兩個版本, 一為窗口版(wscript.exe), 一為命令列版(cscript.exe), 在這個例子我們將使用(cscript.exe),你可以在DOS 命令列下執行:
c:/>cscript c:/scripts/updateadstatus.vbs
接著你可以到Query Analyzer 下查詢資料是否更新, 在實際的應用上, 建議你使用批此檔來區分不同時段的工作, 好比說我會創造一支名為dailytask.bat 的批次檔來執行所有的每日例行工作, 如此一來, 我只需將所有每日應執行的script 放到這支批次檔即可, 然後利用AT Command 或是SQL Server Agent 定時每日執行dailytask.bat 。
強烈建議使用SQL Server Agent, 這會比使用AT Command 來得有效率且穩定! 設定SQL Server Agent 你可以執行Enterprise Manager, 展開後會看到這樣的畫面。
鼠標右點Jobs, 選擇New Job 。
選擇Step 按New 。
指定Step Name , Type 請選擇Operating System Command, 並設定執行的Command 。
選擇Schedule 設定你的流程。