共用方式為


執行包含 SQL 查詢的範本 (SQLXMLOLEDB 提供者)

此範例說明如何使用 SQLXMLOLEDB 提供者特有的屬性 ClientSideXML。在此用戶端 ADO 範例應用程式中,由 SQL 查詢所組成的 XML 範本會在伺服器上執行。

因為 ClientSideXML 屬性設定為 True,所以會將沒有 FOR XML 子句的 SELECT 陳述式傳送到伺服器。伺服器會執行查詢,並將資料列集傳回給用戶端。用戶端接著會將 FOR XML 轉換套用至資料列集,並產生 XML 文件。

XML 範本會針對產生的 XML 文件提供單一最上層的根元素 (<ROOT>);因此,不會提供 xml root 屬性。

若要執行 XML 範本,必須指定 Dialect {5d531cb2-e6ed-11d2-b252-00c04f681b71}。

[!附註]

在程式碼中,您必須於連接字串內提供 SQL Server 執行個體的名稱。此外,這個範例指定 SQL Server Native Client (SQLNCLI10) 用於資料提供者 (這需要安裝其他網路用戶端軟體)。如需詳細資訊,請參閱<SQL Server 2008 Native Client 的系統需求>。

Option Explicit

Sub Main()
  Dim oTestStream As New ADODB.Stream
  Dim oTestConnection As New ADODB.Connection
  Dim oTestCommand As New ADODB.Command
  oTestConnection.Open "Provider=SQLXMLOLEDB.4.0;Data Provider=SQLNCLI10;Data Source=SqlServerName;Initial Catalog=AdventureWorks;Integrated Security=SSPI;"

  Set oTestCommand.ActiveConnection = oTestConnection
  oTestCommand.Properties("ClientSideXML") = True
  oTestCommand.CommandText = "<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'> " & _
        " <sql:query> " & _
        "   SELECT TOP 10 FirstName, LastName FROM Person.Contact FOR XML AUTO " & _
        "   </sql:query> " & _
        " </ROOT> "
  oTestStream.Open
  ' You need the dialect if you are executing 
  ' XML templates (not for SQL queries).
  oTestCommand.Dialect = "{5d531cb2-e6ed-11d2-b252-00c04f681b71}"
  oTestCommand.Properties("Output Stream").Value = oTestStream
  oTestCommand.Execute , , adExecuteStream

  oTestStream.Position = 0
  oTestStream.Charset = "utf-8"
  Debug.Print oTestStream.ReadText(adReadAll)
End Sub

Sub Form_Load()
  Main
End Sub