問題代碼
If rs("num") = "1" Then Response.Write "1" ' 輸出 1
If rs("num") = Server.HTMLEncode("1") Then Response.Write "2" ' 不輸出
原因分析
- rs("num") 返回的是 Field 對象,而非直接值。ASP 默認屬性
.Value 會隱式調用,但比較時涉及類型轉換規則。
- 類型不匹配:
rs("num") 可能是 Integer 類型(數值 1),而 "1" 是 String。ASP 比較時會嘗試轉換,但 Server.HTMLEncode("1") 返回 String,導致 Integer = String 判定為 False。
Server.HTMLEncode 實際不改變純數字字符串,僅編碼特殊字符。
正確寫法
' 顯式取值並統一類型
Dim numVal : numVal = rs("num").Value ' 獲取 Variant 值
If CStr(numVal) = "1" Then Response.Write "1"
If CStr(numVal) = "1" Then Response.Write "2" ' 現在兩者相同
' 或直接比較數值
If CLng(numVal) = 1 Then Response.Write "2"
最佳實踐
- 始終使用
rs("field").Value 顯式取值,避免隱式轉換歧義。
- 比較前統一轉換為目標類型(
CStr、CLng、CDbl)。
- 資料庫字段類型設計階段即確定,應用層按類型處理。