首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

ADO 讀取 SQL Server TEXT/NTEXT 大字段內容的正確姿勢

     編輯:關於SqlServer

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),配合參數化命令,上述問題自然消失。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved