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

SQL Server 2000 使用 FOR XML 生成 XML 輸出與 ADO Stream 讀取技巧

     編輯:關於SqlServer

FOR XML 快速產出 XML

在查詢結尾加入 FOR XML AUTO (或 RAW, EXPLICIT) 即可將結果集直接轉為 XML 文件,大幅提升效率與開發速度。詳細語法請參閱 Books Online。

ADO 2.6+ 讀取 XML 必須使用 Stream 物件

若繼續使用 Recordset 開啟命令,只能得到 Unicode XML Schema,無法取得 XML 實際內容。

正確做法:Command 物件的 Input/Output Stream 屬性

  • Command.Properties("Output Stream") = ADO Stream 物件
  • 執行 Command.Execute ,, 1024 (adExecuteStream)
  • 從 Stream 讀取 XML:Stream.ReadText(-1)

範例 (VBScript/ASP)

Dim adoConn, adoCmd, adoStream
Set adoConn = Server.CreateObject("ADODB.Connection")
Set adoCmd = Server.CreateObject("ADODB.Command")
Set adoStream = Server.CreateObject("ADODB.Stream")

adoConn.ConnectionString = "Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=MyDB;User Id=sa;Password=pwd;"
adoConn.Open
Set adoCmd.ActiveConnection = adoConn
adoCmd.CommandType = 1 ' adCmdText
adoCmd.CommandText = "SELECT * FROM Customers FOR XML AUTO, ROOT('Root')"

adoStream.Open
Set adoCmd.Properties("Output Stream") = adoStream
adoCmd.Execute ,, 1024 ' adExecuteStream

Response.Write adoStream.ReadText(-1)

adoStream.Close
Set adoStream = Nothing
adoConn.Close
Set adoCmd = Nothing
Set adoConn = Nothing

優勢

  • 避免建立 Recordset 物件,省去資料轉換與記憶體複製開銷。
  • XML 直接以串流方式輸出至 HTTP Response、檔案或下游處理。
  • 可搭配 Input Stream 傳入 XML 文件執行 OPENXML 寫入資料庫。

注意事項

  • 需 MDAC 2.6 / ADO 2.6 以上版本支援 Stream 物件。
  • 大量 XML 輸出時注意記憶體使用,可分塊讀取 ReadText(chunkSize)。
  • SQL Server 2005+ 可直接使用 SELECT ... FOR XML PATH、TYPE 指令回傳 xml 型別,搭配 SqlXml 類別更高效。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved