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

SQL Server 2000 利用 ADO Stream 輸出 XML 的技巧

     編輯:關於SqlServer

SQL Server 2000 的 FOR XML 子句可輕易將查詢結果轉為 XML,但搭配 ADO 2.6+ 讀取時,傳統 Recordset 只能取得 XML Schema,無法取得實際 XML 內容。關鍵在於使用 Command 物件的 Output Stream 屬性,直接將 XML 串流輸出至 Response 或 Stream 物件,避免中間 Recordset 開銷。

核心概念:Stream 導向輸出

  • Command 物件具備 Input Stream 與 Output Stream 屬性 (型別為 IUnknown)
  • 可指派 XML Parser 介面、Request、Response 等支援 Stream 的物件
  • 優點:不建立 Recordset、不暫存資料、降低記憶體與 CPU 開銷

ASP + ADO 完整範例:直接輸出 XML 至瀏覽器

<%@ Language=VBScript %>
<!-- #include file="ADOVBS.inc" -->
<%
Dim objConn, objCmd, i
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=SQLOLEDB.1;Password=;Persist Security Info=True;User ID=sa;Initial Catalog=PBA;Data Source=(local)"

Set objCmd = Server.CreateObject("ADODB.Command")
objCmd.ActiveConnection = objConn
objCmd.Properties("Output Stream") = Response          ' 關鍵:直接串流到 HTTP 回應
objCmd.Properties("XML Root") = "root"                 ' 根元素名稱
objCmd.CommandText = "SELECT * FROM UserStatus FOR XML AUTO"

Response.ContentType = "text/xml"                      ' 設定 MIME 型別
objCmd.Execute i, , adExecuteStream                    ' 串流執行模式

Set objCmd = Nothing
objConn.Close
Set objConn = Nothing
%>

關鍵屬性說明

屬性用途備註
Output Stream指定 XML 輸出目的地Response、Stream、檔案物件皆可
XML Root指定 XML 文件根元素名稱FOR XML AUTO/RAW 需此屬性產生合法 XML
adExecuteStream執行選項常數告知 ADO 以 Stream 模式執行

進階應用場景

  • Web Service 回應:直接輸出 SOAP 訊息格式
  • 檔案下載:Output Stream = Server.CreateObject("ADODB.Stream") 存檔後 Response.BinaryWrite
  • XSLT 轉換鏈:輸出至 MSXML2.DOMDocument 再套用樣式表
  • 大量資料分段輸出:搭配 FOR XML EXPLICIT 控制結構,避免記憶體暴增

常見問題排查

  1. 只收到 Schema:未設定 Output Stream,或未使用 adExecuteStream
  2. 中文亂碼:確認 Response.CodePage = 65001 (UTF-8) 或 950 (Big5),資料庫排序規則一致
  3. 權限錯誤:連線帳號需具備 SELECT 權限與 FOR XML 執行權限

版本演進提示

SQL Server 2005+ 引入原生 xml 資料型別、FOR XML PATH、XQuery 支援,配合 ADO.NET XmlReader 處理更靈活。新專案建議直接採用新架構。

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