TEXT/NTEXT/IMAGE 類型本質是大對象(LOB),而非普通文本。ADO 兩種執行方式行為差異巨大:
Connection.Execute / Command.Execute:返回只讀、前向 Recordset,對 LOB 列僅返回指標/截斷值,無法獲取完整內容Recordset.Open:返回可滾動、可更新 Recordset,正常讀取 LOB 完整內容' 錯誤示範
Set rs = conn.Execute("SELECT Content FROM Articles WHERE ID=1")
Response.Write rs("Content") ' 空或截斷
' 正確示範
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT Content FROM Articles WHERE ID=1", conn, 1, 1 ' adOpenKeyset, adLockReadOnly
Response.Write rs("Content") ' 完整內容
conn.Execute 讀取非 LOB 列,極快rs.Open 讀取含 LOB 列SELECT ID, Title FROM ... 列表用;SELECT Content FROM ... WHERE ID=? 詳情用Execute 返回的默認游標類型(adOpenForwardOnly + adLockReadOnly)不支持 LOB 序列化流讀取;Open 允許指定 adOpenKeyset/adOpenStatic 觸發完整數據獲取。
SQL Server 2005+ 建議改用 VARCHAR(MAX)/NVARCHAR(MAX),配合參數化命令,上述問題自然消失。