MySQL 憑藉輕量、高速、免費等優勢,成為眾多網站首選資料庫。雖然 PHP + MySQL 是黃金搭檔,但傳統 ASP 應用同樣能透過 ODBC 驅動順暢串接 MySQL。本文詳述在 Windows 環境下,ASP 使用 MySQL 的完整實作步驟,包含驅動安裝、系統 DSN 建立、無 DSN 連線字串、範例程式碼與常見坑點,助您快速落地。
myodbc.dll),官網 MySQL Connector/ODBC 下載將 myodbc.dll 複製至 C:\Windows\System(Win2000/XP 為 C:\Winnt\System32),建立 myodbc.reg 檔,內容如下:
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\MySQL ODBC 3.51 Driver]
"UsageCount"=dword:00000002
"Driver"="C:\\Windows\\System\\myodbc.dll"
"Setup"="C:\\Windows\\System\\myodbc.dll"
"SQLLevel"="1"
"FileUsage"="0"
"DriverODBCVer"="02.50"
"ConnectFunctions"="YYY"
"APILevel"="1"
"CpTimeout"="120"
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
"MySQL ODBC 3.51 Driver"="installed"
雙擊匯入登錄檔,控制台 → ODBC 資料來源 → 驅動程式頁籤,應可見 MySQL ODBC 3.51 Driver。
| 欄位 | 說明 | 範例值 |
|---|---|---|
| Windows DSN Name | DSN 名稱(ASP 連線字串引用) | hc188 |
| MySQL Host | 資料庫主機 IP 或主機名 | localhost 或 192.168.1.100 |
| MySQL Database Name | 預設使用的資料庫 | hc188 |
| User | 資料庫登入帳號 | root |
| Password | 登入密碼(可留空) | 123456 |
| Port | 連接埠(預設 3306) | 3306 |
點擊「測試」確認連線成功後存檔。
<%
Dim strConnection, adoDataConn, rs, strQuery
' 使用 DSN 連線
strConnection = "dsn=hc188;uid=root;pwd=123456;database=hc188"
Set adoDataConn = Server.CreateObject("ADODB.Connection")
adoDataConn.Open strConnection
strQuery = "SELECT username, password FROM user"
Set rs = adoDataConn.Execute(strQuery)
If Not rs.BOF Then
%>
<table border="1">
<tr><th>username</th><th>password</th></tr>
<%
Do While Not rs.EOF
%>
<tr>
<td><%=rs("username")%></td>
<td><%=rs("password")%></td>
</tr>
<%
rs.MoveNext
Loop
%>
</table>
<%
Else
Response.Write "Sorry, no data found."
End If
rs.Close
adoDataConn.Close
Set rs = Nothing
Set adoDataConn = Nothing
%>
優點:部署簡單、無需在伺服器建立 DSN、適合虛擬主機或無控制台權限環境。
將連線字串改為:
strConnection = "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=hc188;Uid=root;Pwd=123456;Option=3;"
關鍵參數說明:
Driver:驅動名稱需與 ODBC 驅動程式頁籤顯示完全一致Server:MySQL 主機 IPDatabase:預設資料庫Option:連線選項位元組合(3 = Found rows + Return matched rows)其餘 ADO 程式碼不變。實測發現無 DSN 連線同樣需提供帳號密碼,若發現可無密碼連線,請檢查 MySQL user 表是否存在匿名帳號(user=''),應立即刪除:DELETE FROM mysql.user WHERE user=''; FLUSH PRIVILEGES;
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| 「找不到資料來源名稱」 | DSN 名稱拼寫錯誤或未建立系統 DSN | 檢查拼寫、確認在「系統 DSN」而非「使用者 DSN」 |
| 「驅動程式不支援此功能」 | MyODBC 版本過舊或與作業系統位元數不符 | 下載對應 32/64 位元最新版 MySQL Connector/ODBC |
| 中文亂碼 | 字元集不匹配 | 連線字串加 Charset=utf8mb4;;資料表/欄位採用 utf8mb4_general_ci |
| 連線逾時 | 防火牆阻擋 3306、MySQL bind-address 限制 | 開放防火牆、設定 bind-address=0.0.0.0 或具體 IP |
若專案允許,強烈建議採用 ASP.NET (C#/VB.NET) + MySQL Connector/NET 或 ASP Classic + ADO + 参數化查詢 替代舊式字串拼接,防範 SQL 注入。若必須維護傳統 ASP,請務必:
Command 物件搭配 Parameters 集合執行參數化 SQLSELECT/INSERT/UPDATE/DELETE 於業務表掌握上述兩種連線模式,即可在舊版 ASP 專案中穩健接入 MySQL。隨著技術棧演進,規劃遷移至 .NET Core / Node.js / PHP 等現代框架將帶來更佳效能與安全性。