本文詳細說明如何在 ASP 中透過 ADO (ActiveX Data Objects) 建立 SQL Server 連接,並善用 ODBC 3.0 連接池提升效能。涵蓋 DSN 設定、Global.asa 應用、連接程式碼範例、常見錯誤排查。
連接池可大幅減少建立連接的開銷。請參考 Microsoft 知識庫文件 Q164221 啟用 ODBC 連接池功能。
SQLSysDSN)、描述、伺服器位址。uid 不可為空。<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnStart
Session("ConnectionString") = "dsn=SQLSysDSN;uid=your_user;pwd=your_password;DATABASE=pubs;APP=ASP Script"
Session("ConnectionTimeout") = 15
Session("CommandTimeout") = 30
End Sub
</SCRIPT>
注意: 若 ASP 應用程式位於子資料夾且非虛擬目錄,Global.asa 必須放在父虛擬目錄根目錄,否則會出現「Data source name not found」錯誤。
<%@ LANGUAGE=VBScript %>
<%
' 頁面開頭開啟連接
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.ConnectionTimeout = Session("ConnectionTimeout")
OBJdbConnection.CommandTimeout = Session("CommandTimeout")
OBJdbConnection.Open Session("ConnectionString")
%>
<html><body>
<!-- 頁面內容 -->
</body></html>
<%
' 頁面結尾關閉連接(歸還連接池)
OBJdbConnection.Close
Set OBJdbConnection = Nothing
%>
<%
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open Session("ConnectionString")
Set SQLStmt = Server.CreateObject("ADODB.Command")
Set RS = Server.CreateObject("ADODB.Recordset")
SQLStmt.CommandText = "SELECT au_id, au_lname, au_fname, phone FROM authors"
SQLStmt.CommandType = 1 ' adCmdText
Set SQLStmt.ActiveConnection = OBJdbConnection
RS.Open SQLStmt
Do While Not RS.EOF
Response.Write RS("au_id") & " " & RS("au_lname") & ", " & RS("au_fname") & " - " & RS("phone") & "<br>"
RS.MoveNext
Loop
RS.Close
OBJdbConnection.Close
Set RS = Nothing
Set OBJdbConnection = Nothing
%>
| 錯誤訊息 | 可能原因 | 解決方向 |
|---|---|---|
| Login failed - User: Not defined as a valid user of a trusted SQL Server connection | DSN 勾選信任連接、或 SQL Server 為 Windows 整合驗證、或 uid 為空 | DSN 取消信任連接、改用 SQL 驗證、提供 uid/pwd |
| Data source name not found and no default driver specified | Global.asa 位置錯誤、DSN 名稱拼寫錯誤 | 確認 Global.asa 在應用程式根目錄、DSN 名稱完全一致 |
| Connection broken / Communication link failure | 網路中斷、SQL Server 服務停止、防火牆封鎖 | 檢查網路連通性、SQL Server 服務狀態、防火牆規則 |
善用系統 DSN 集中管理連接屬性,配合連接池與正確的連接開關時機,能構建穩定、高效能的 ASP + SQL Server 應用程式。