SQL Server 2000 引入 XDR (XML-Data Reduced) 結構描述,支援透過 FOR XML 與對應結構描述檔 (.xml) 直接輸出階層式 XML。本文提供完整 ASP + ADO 程式碼範例,示範如何使用 ADODB.Command 設定對應結構描述、基底路徑與輸出串流,直接將查詢結果以 XML 格式串流至 HTTP 回應。
Orders.xml(見文末完整內容),放置於 Web 可存取路徑(如 C:\Inetpub\wwwroot\PBA)。Northwind 存在 Orders、Customers 表。<%@ LANGUAGE=VBScript %>
<%
Dim sConn, adoConn, adoCmd
sConn = "Provider=SQLOLEDB; Data Source=(local); Initial Catalog=Northwind; User ID=SA; Password=;"
Set adoConn = Server.CreateObject("ADODB.Connection")
adoConn.ConnectionString = sConn
adoConn.CursorLocation = 3 ' adUseClient
adoConn.Open
Set adoCmd = CreateObject("ADODB.Command")
Set adoCmd.ActiveConnection = adoConn
adoCmd.CommandText = "Customer[@CompanyName=""Tortuga Restaurante""]"
adoCmd.Dialect = "{EC2A4293-E898-11D2-B1B7-00C04F680C56}" ' XDR 查詢語言 GUID
adoCmd.Properties("Mapping Schema") = "Orders.XML"
adoCmd.Properties("Base Path") = "C:\INETPUB\WWWROOT\PBA"
adoCmd.Properties("Output Stream") = Response
Response.Write "<XML ID='MyDataIsle'>"
adoCmd.Execute , , 1024 ' adExecuteStream
Response.Write "</XML>"
%>
<XML ID="MyDataIsle">
<Customer CustomerID="TORTU" CompanyName="Tortuga Restaurante">
<Order CustomerID="TORTU" OrderID="10276" OrderDate="1996-08-08T00:00:00" />
<Order CustomerID="TORTU" OrderID="10293" OrderDate="1996-08-29T00:00:00" />
...
</Customer>
</XML>
<?XML VERSION="1.0"?>
<SCHEMA XMLNS="URN:SCHEMAS-MICROSOFT-COM:XML-DATA"
XMLNS:DT="URN:SCHEMAS-MICROSOFT-COM:DATATYPES"
XMLNS:SQL="URN:SCHEMAS-MICROSOFT-COM:XML-SQL">
<ELEMENTTYPE NAME="ORDER" SQL:RELATION="ORDERS">
<ATTRIBUTETYPE NAME="CUSTOMERID"/>
<ATTRIBUTETYPE NAME="ORDERID"/>
<ATTRIBUTETYPE NAME="ORDERDATE"/>
<ATTRIBUTE TYPE="CUSTOMERID" SQL:FIELD="CUSTOMERID"/>
<ATTRIBUTE TYPE="ORDERID" SQL:FIELD="ORDERID"/>
<ATTRIBUTE TYPE="ORDERDATE" SQL:FIELD="ORDERDATE"/>
</ELEMENTTYPE>
<ELEMENTTYPE NAME="CUSTOMER" SQL:RELATION="CUSTOMERS">
<ATTRIBUTETYPE NAME="CUSTOMERID"/>
<ATTRIBUTETYPE NAME="COMPANYNAME"/>
<ATTRIBUTE TYPE="CUSTOMERID" SQL:FIELD="CUSTOMERID"/>
<ATTRIBUTE TYPE="COMPANYNAME" SQL:FIELD="COMPANYNAME"/>
<ELEMENT TYPE="ORDER">
<SQL:RELATIONSHIP KEY-RELATION="CUSTOMERS" KEY="CUSTOMERID"
FOREIGN-KEY="CUSTOMERID" FOREIGN-RELATION="ORDERS"/>
</ELEMENT>
</ELEMENTTYPE>
</SCHEMA>
| 屬性 | 用途 |
|---|---|
| Dialect | 指定查詢語言為 XDR (GUID 固定值) |
| Mapping Schema | 對應結構描述檔名(相對 Base Path) |
| Base Path | 結構描述檔所在實體目錄 |
| Output Stream | 輸出目標(此處為 Response 物件,直接串流至 HTTP) |
| adExecuteStream (1024) | Execute 選項,指示輸出為串流而非 Recordset |
SQL Server 2005+ 建議使用 FOR XML PATH/AUTO/EXPLICIT 搭配 TYPE 指令直接回傳 XML 型別,再由應用層 (ADO.NET, Entity Framework) 處理,無需維護外部 XDR 結構描述檔。