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

SQL Server 2000 XDR (XML-Data Reduced) 查詢實作:ADO 串流輸出 XML 範例

     編輯:關於SqlServer

SQL Server 2000 引入 XDR (XML-Data Reduced) 結構描述,支援透過 FOR XML 與對應結構描述檔 (.xml) 直接輸出階層式 XML。本文提供完整 ASP + ADO 程式碼範例,示範如何使用 ADODB.Command 設定對應結構描述、基底路徑與輸出串流,直接將查詢結果以 XML 格式串流至 HTTP 回應。

前置準備

  1. 建立對應結構描述檔 Orders.xml(見文末完整內容),放置於 Web 可存取路徑(如 C:\Inetpub\wwwroot\PBA)。
  2. 確認資料庫 Northwind 存在 Orders、Customers 表。

ASP 程式碼 (VBScript)

<%@ 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 範例

<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>

Orders.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 結構描述檔。

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