執行 XPath 查詢 (SQLXMLOLEDB 提供者)
此範例示範如何使用下列 SQLXMLOLEDB 提供者專屬的屬性:
ClientSideXML
Base Path
Mapping Schema
在這個範例 ADO 應用程式中,已針對 XSD 對應結構描述 (MySchema.xml) 指定了 XPath 查詢 (root)。 此結構描述具有包含 ContactID、FirstName 和 LastName 屬性的 <Contacts> 元素。 在此結構描述中,系統會進行預設對應:元素名稱會對應至具有相同名稱的資料表,而且屬於簡單類型的屬性會對應至具有相同名稱的資料行。
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:sql='urn:schemas-microsoft-com:mapping-schema'>
<xsd:element name= 'root' sql:is-constant='1'>
<xsd:complexType>
<xsd:sequence>
<xsd:element ref = 'Contacts'/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name='Contacts' sql:relation='Person.Contact'>
<xsd:complexType>
<xsd:attribute name='ContactID' type='xsd:integer' />
<xsd:attribute name='FirstName' type='xsd:string'/>
<xsd:attribute name='LastName' type='xsd:string' />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Mapping Schema 屬性會根據執行的 XPath 查詢提供對應結構描述。 此對應結構描述可能是 XSD 或 XDR 結構描述。 Base Path 屬性會提供對應結構描述的檔案路徑。
ClientSideXML 屬性會設定為 True。 因此,XML 文件會在用戶端上產生。
在應用程式中,會直接指定 XPath 查詢。 因此,必須包含 XPath Dialect {ec2a4293-e898-11d2-b1b7-00c04f680c56}。
[!附註]
在程式碼中,您必須於連接字串內提供 SQL Server 執行個體的名稱。 此外,這個範例指定 SQL Server Native Client (SQLNCLI11) 用於資料提供者 (這需要安裝其他網路用戶端軟體)。 如需詳細資訊,請參閱<SQL Server 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=SQLNCLI11;data source=SqlServerName;initial catalog=AdventureWorks;Integrated Security= SSPI;"
oTestCommand.ActiveConnection = oTestConnection
oTestCommand.Properties("ClientSideXML") = True
oTestCommand.CommandText = "root"
oTestStream.Open
oTestCommand.Dialect = "{ec2a4293-e898-11d2-b1b7-00c04f680c56}"
oTestCommand.Properties("Output Stream").Value = oTestStream
oTestCommand.Properties("Base Path").Value = "c:\Schemas\SQLXML4\XPathDirect\"
oTestCommand.Properties("Mapping Schema").Value = "mySchema.xml"
oTestCommand.Properties("Output Encoding") = "utf-8"
oTestCommand.Execute , , adExecuteStream
oTestStream.Position = 0
oTestStream.Charset = "utf-8"
Debug.Print oTestStream.ReadText(adReadAll)
End Sub
Sub Form_Load()
main
End Sub