我認爲,理查德的建議是這樣的:
原始代碼:
Dim rs
Set rs = Server.CreateObject("ADO.Recordset")
... recordset shiznit ...
Set rs = nothing
新代碼:
Dim rs
Set rs = New cHomegrownAdoRecordsetWrapper
... same unchanged recordset shiznit ...
Set rs = nothing
如果代碼在VBScript,雖然,你會很難實現這一點。
第一個問題你運行[如果你嘗試在VBScript本身做],ADO Recordset對象在其方法中大量使用可選參數,並且你不能創建一個函數(或類方法)在VBScript中有可選參數。因此,您將無法將任何有用的子類化。
雖然您可以在JScript中繼承ADo記錄集對象,但可以在同一頁中使用同一腳本混合並匹配兩種語言;只要意識到JScript將首先執行的任何內容,無論它在頁面中的什麼位置。 ASP首先運行JScript解釋器,然後運行VBScript解釋器。
您可能也可以創建自己的基於COM的DLL來封裝ADO對象......但您必須自己調查一下。
現在。
如果是我,我會嚴肅看待搜索&替換,具體取決於代碼的一致性。
如果您可以使用「dd FullMonthName YYYY」(即明確的日期格式)獲得內聯查詢的代碼,則無需擔心數據庫的DMY問題,代碼將會在任何運行的SQL版本上生存。
只要日期具有基於文本的月份名稱和全年,SQL就不會考慮它們的順序。
我懷疑你甚至可以把Richard的想法放在一個更小的範圍內,並且在有內聯日期的地方放一個包裝函數,做一些運行時嗅探,然後讓所有的東西重新工作。
就像自定義ADO DLL的想法 - 聽起來很明智,但我懷疑我會花時間去做。鑑於它所有的VBScript我認爲這是查找和替換。我想所有的SQL將以選擇,插入,更新或刪除或調用存儲過程開始。只需在每個SQL字符串的開頭添加set dateformat DMY部分,它應該是好的。我更喜歡將所有日期更改爲使用「dd FullMonthName YYYY」格式的想法,但這會花費更多時間。我希望我可以強制SQL Azure使用英國日期格式進行一次登錄等,或將其設置爲連接字符串。 – GraemeMiller 2011-06-18 12:12:39