經典 ASP (Active Server Pages) + ADO (ActiveX Data Objects) 存取 SQL Server 視圖與預存程序的標準模式。
Connection:管理資料庫連線。Command:封裝指令文本/預存程序、參數集合。Recordset:保存查詢結果集。控制台 → [ODBC 資料來源] → 新增系統 DSN,指向 SQL Server,設定伺服器、資料庫、驗證方式。
<%
Set DataConn = Server.CreateObject("ADODB.Connection")
DataConn.Open "DSN=SinoTrans;SERVER=APP_SERVER;UID=sa;PWD=;..."
Set cmdTemp = Server.CreateObject("ADODB.Command")
Set rst = Server.CreateObject("ADODB.Recordset")
cmdTemp.CommandText = "Customers" -- 視圖名稱
cmdTemp.CommandType = 2 -- adCmdTable
Set cmdTemp.ActiveConnection = DataConn
rst.Open cmdTemp, , 1, 3 -- adOpenKeyset, adLockOptimistic
%>
<%
Set DataConn = Server.CreateObject("ADODB.Connection")
DataConn.Open "DSN=SinoTrans;SERVER=APP_SERVER;UID=sa;PWD=;..."
Set cmdTemp = Server.CreateObject("ADODB.Command")
Set rst = Server.CreateObject("ADODB.Recordset")
cmdTemp.CommandText = "dbo.pd_test"
cmdTemp.CommandType = 4 -- adCmdStoredProc
Set cmdTemp.ActiveConnection = DataConn
Set tmpParam = cmdTemp.CreateParameter("Return Value", 3, 4, 4) -- adInteger, adParamReturnValue
cmdTemp.Parameters.Append tmpParam
Set tmpParam = cmdTemp.CreateParameter("@BeginDate", 135, 1, 16, riqi) -- adDBTimeStamp, adParamInput
cmdTemp.Parameters.Append tmpParam
rst.Open cmdTemp, , 1, 3
%>
預存程序包含多個 SELECT 且邏輯互斥時,Command 會報錯「SELECT 陳述式過多」。解法:
<%
Set DataConn = Server.CreateObject("ADODB.Connection")
DataConn.Open "DSN=SinoTrans;SERVER=APP_SERVER;UID=sa;PWD=;..."
ss = "EXECUTE dbo.pd_test '" & riqi1 & "'"
Set rs = DataConn.Execute(ss)
%>
Execute 直接執行 T-SQL 批次,支援多結果集循序讀取 (NextRecordset)。ASP+ADO 存取 SQL Server 視圖/預存程序的標準模式:Connection → Command → Recordset。視圖視同表 (adCmdTable);預存程序用 adCmdStoredProc + 參數集合;多結果集改用 Connection.Execute。B/S 架構下將商業邏輯下沉至預存程序,ASP 僅負責呈現,實現關注點分離。