Arbeiten mit dem XML-Datentyp in Anwendungen

In diesem Thema werden die Optionen beschrieben, die Ihnen bei der Arbeit mit dem xml-Datentyp in Ihrer Anwendung zur Verfügung stehen. Das Thema enthält Informationen zu Folgendem:

  • Verarbeiten von XML in einer Spalte vom Typ xml mithilfe von ADO und SQL Server Native Client

  • Verarbeiten von XML in einer Spalte vom Typ xml mithilfe von ADO.NET

  • Verarbeiten des xml-Typs in Parametern mithilfe von ADO.NET

Verarbeiten von XML in einer Spalte vom Typ xml mithilfe von ADO und SQL Server Native Client

Damit mit MDAC-Komponenten auf Typen und Funktionen zugegriffen werden kann, die in SQL Server 2005 eingeführt wurden, müssen Sie die DataTypeCompatibility-Initialisierungseigenschaft in der ADO-Verbindungszeichenfolge festlegen.

Im folgenden VBScript-Beispiel werden die Ergebnisse der Abfrage einer xml-Datentypspalte, Demographics, in der Sales.Store-Tabelle der AdventureWorks2008R2-Beispieldatenbank angezeigt. Die Abfrage sucht insbesondere nach dem Instanzwert dieser Spalte für die Zeile, in der die CustomerID gleich dem Wert 3 ist.

Const DS = "MyServer"
Const DB = "AdventureWorks2008R2"

Set objConn = CreateObject("ADODB.Connection")
Set objRs = CreateObject("ADODB.Recordset")

CommandText = "SELECT Demographics" & _
              " FROM Sales.Store" & _
              " INNER JOIN Sales.Customer" & _
              " ON Sales.Store.BusinessEntityID = sales.customer.StoreID" & _
              " WHERE Sales.Customer.CustomerID = 3" & _
              " OR Sales.Customer.CustomerID = 4"
                   
ConnectionString = "Provider=SQLNCLI10" & _
                   ";Data Source=" & DS & _
                   ";Initial Catalog=" & DB & _
                   ";Integrated Security=SSPI;" & _
                   "DataTypeCompatibility=80"

'Connect to the data source.
objConn.Open ConnectionString

'Execute command through the connection and display
Set objRs = objConn.Execute(CommandText)

Dim rowcount
rowcount = 0
Do While Not objRs.EOF
   rowcount = rowcount + 1
   MsgBox "Row " & rowcount & _
           vbCrLf & vbCrLf & objRs(0)
   objRs.MoveNext
Loop

'Clean up.
objRs.Close
objConn.Close
Set objRs = Nothing
Set objConn = Nothing

In diesem Beispiel wird dargestellt, wie die Datentyp-Kompatibilitätseigenschaft festgelegt wird. Sie ist standardmäßig auf 0 festgelegt, wenn Sie SQL Server Native Client verwenden. Nachdem Sie den Wert auf 80 festgelegt haben, sorgt der SQL Server Native Client-Anbieter dafür, dass xml-Spalten und Spalten eines benutzerdefinierten Typs als SQL Server 2000-Datentypen angezeigt werden. Dabei handelt es sich um DBTYPE_WSTR und DBTYPE_BYTES.

SQL Server Native Client muss ebenfalls auf dem Clientcomputer installiert und in der Verbindungszeichenfolge mit "Provider=SQLNCLI10;..." zur Verwendung als Datenanbieter angegeben sein.

So testen Sie dieses Beispiel

  1. Prüfen Sie, ob SQL Server Native Client installiert ist und ob MDAC 2.6.0 oder höher auf dem Clientcomputer zur Verfügung steht.

    Weitere Informationen finden Sie unter Programmierung für SQL Server 2008 R2 Native Client.

  2. Prüfen Sie, ob die AdventureWorks2008R2-Beispieldatenbank in SQL Server installiert ist.

    Für dieses Beispiel benötigen Sie die AdventureWorks2008R2-Beispieldatenbank. Weitere Informationen finden Sie unter Überlegungen zum Installieren der SQL Server-Beispiele und -Beispieldatenbanken.

  3. Kopieren Sie den weiter oben in diesem Thema dargestellten Code, und fügen Sie ihn in Ihren Text- oder Code-Editor ein. Speichern Sie die Datei unter dem Dateinamen HandlingXmlDataType.vbs.

  4. Ändern Sie das Skript entsprechend Ihrer SQL Server-Installation, und speichern Sie die Änderungen.

    Wenn z. B. MyServer angegeben ist, sollten Sie es durch (local) oder den tatsächlichen Namen des Servers ersetzen, auf dem SQL Server installiert ist.

  5. Führen Sie HandlingXmlDataType.vbs und das Skript aus.

Die Ergebnisse sollten ähnlich wie die folgende Beispielausgabe aussehen:

Row 1

<StoreSurvey xmlns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey">
  <AnnualSales>1500000</AnnualSales>
  <AnnualRevenue>150000</AnnualRevenue>
  <BankName>Primary International</BankName>
  <BusinessType>OS</BusinessType>
  <YearOpened>1974</YearOpened>
  <Specialty>Road</Specialty>
  <SquareFeet>38000</SquareFeet>
  <Brands>3</Brands>
  <Internet>DSL</Internet>
  <NumberEmployees>40</NumberEmployees>
</StoreSurvey>

Row 2

<StoreSurvey xmlns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey">
  <AnnualSales>300000</AnnualSales>
  <AnnualRevenue>30000</AnnualRevenue>
  <BankName>United Security</BankName>
  <BusinessType>BM</BusinessType>
  <YearOpened>1976</YearOpened>
  <Specialty>Road</Specialty>
  <SquareFeet>6000</SquareFeet>
  <Brands>2</Brands>
  <Internet>DSL</Internet>
  <NumberEmployees>5</NumberEmployees>
</StoreSurvey>

Verarbeiten von XML in einer Spalte vom Typ xml mithilfe von ADO.NET

Um XML in einer xml-Datentypspalte mithilfe von ADO.NET und Microsoft .NET Framework zu verarbeiten, können Sie das Standardverhalten der SqlCommand-Klasse verwenden. Eine xml-Datentypspalte und ihre Werte können z. B. mit einem SqlDataReader auf dieselbe Weise abgerufen werden wie eine beliebige SQL-Spalte. Wenn Sie jedoch mit dem Inhalt einer xml-Datentypspalte als XML arbeiten möchten, müssen Sie den Inhalt zunächst einem XmlReader-Typ zuweisen.

Weitere Informationen sowie einen Beispielcode finden Sie im Abschnitt über die XML-Spaltenwerte in einem Datenleser in der Microsoft .NET Framework 2.0-SDK-Dokumentation.

Verarbeiten einer Spalte vom Typ xml in Parametern mithilfe von ADO.NET

Um einen xml-Datentyp, der als Parameter in ADO.NET und .NET Framework übergeben wird, zu verarbeiten, können Sie den Wert als eine Instanz des SqlXml-Datentyps angeben. Es ist keine besondere Verarbeitung erforderlich, da die xml-Datentypspalten in SQL Server Parameterwerte auf dieselbe Weise annehmen können wie andere Spalten und Datentypen, z. B. string oder integer.

Weitere Informationen sowie einen Beispielcode finden Sie im Abschnitt über die als Befehlsparameter verwendeten XML-Werte in der Microsoft .NET Framework 2.0-SDK-Dokumentation.