ASP (Active Server Pages) 與資料庫結合是早期動態網站核心技術。本文系統說明三種建立連線的方法、連線腳本模組化寫法,並以會員登入系統為例示範完整流程。
| 模式 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| ODBC 系統 DSN | 集中管理、修改 DSN 即生效、跨語言共用 | 需在每台主機建立 DSN、部署麻煩、效能稍低 | 企業內部多伺服器叢集、需頻繁切換資料庫 |
| OLE DB (SQLOLEDB) | 無需 DSN、原生提供者、效能最佳、支援所有 SQL Server 功能 | 連接字串硬編碼在程式 | 推薦預設選擇 |
| ODBC Driver 字串 | 無需 DSN、相容性廣、可用於非 SQL Server 資料源 | 效能次於 OLE DB、參數支援較少 | 舊專案遷移、異構資料庫連線 |
<%
' conn.asp — 放在網站根目錄或共用資料夾
Dim connStr
' 模式二:OLE DB (建議)
connStr = "Provider=SQLOLEDB.1;Data Source=192.168.1.100;Initial Catalog=MyForum;User ID=web_user;Password=P@ssw0rd;"
' 模式一:ODBC DSN (若已建立 DSN=MyDSN)
' connStr = "DSN=MyDSN;UID=web_user;PWD=P@ssw0rd;"
' 模式三:ODBC Driver
' connStr = "Driver={SQL Server};Server=192.168.1.100;Database=MyForum;UID=web_user;PWD=P@ssw0rd;"
' 將連接字串存入 Application 變數,全站共用
Application.Lock
Application("ConnStr") = connStr
Application.Unlock
%>
CREATE TABLE Members (
MemberID INT IDENTITY(1,1) PRIMARY KEY,
LoginName NVARCHAR(50) NOT NULL UNIQUE,
PasswordHash VARBINARY(MAX) NOT NULL, -- bcrypt/Argon2 雜湊
Salt VARBINARY(32) NOT NULL,
Email NVARCHAR(100),
RegDate DATETIME DEFAULT GETDATE(),
IsActive BIT DEFAULT 1
);
<!--#include file="conn.asp"-->
<%
Dim conn, cmd, rs, loginName, pwd, hashedPwd
loginName = Trim(Request.Form("loginName"))
pwd = Trim(Request.Form("pwd"))
If loginName = "" Or pwd = "" Then
Response.Write "請輸入帳號密碼。"
Response.End
End If
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open Application("ConnStr")
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT MemberID, PasswordHash, Salt FROM Members WHERE LoginName = ? AND IsActive = 1"
cmd.CommandType = 1
cmd.Parameters.Append cmd.CreateParameter("@LoginName", 202, 1, 50, loginName) ' adVarWChar
Set rs = cmd.Execute
If rs.EOF Then
Response.Write "帳號不存在或已停用。"
Else
' 這裡需呼叫雜湊驗證函式,示範用簡單比對
' 實際專案請引用 BCrypt.NET 或 ASP 相容雜湊元件
If VerifyHash(pwd, rs("Salt"), rs("PasswordHash")) Then
Session("MemberID") = rs("MemberID")
Session("LoginName") = loginName
Response.Redirect "index.asp"
Else
Response.Write "密碼錯誤。"
End If
End If
rs.Close: Set rs = Nothing
conn.Close: Set conn = Nothing
Function VerifyHash(plainPwd, salt, storedHash)
' 伪代碼:返回 True/False
VerifyHash = False
End Function
%>
Command.Parameters,杜絕 SQL Injection。EXECUTE 預存程序或 SELECT/INSERT/UPDATE 特定表。web.config (ASP.NET) 或註冊表/COM+ 元件 (傳統 ASP)。連線建立是資料庫應用的地基。選對模式、模組化管理、參數化查詢、最小權限,四大原則貫徹執行,即能構建穩健、安全、可維護的 ASP + SQL Server 系統。