アプリケーションでの XML データの使用

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

この記事では、アプリケーションで xml データ型を操作する際のオプションについて説明します。 この記事には、次の内容に関する情報が含まれています。

  • ADO および SQL Server Native Client を使用した、xml 型の列に含まれている XML の操作

  • ADO.NET を使用した、 xml 型の列に含まれている XML の操作

  • ADO.NET を使用した、パラメーターに含まれている xml 型の操作

ADO および SQL Server Native Client を使用した、xml 型の列に含まれている XML の操作

MDAC コンポーネントを使用して、SQL Server 2005 (9.x) に導入された型や機能にアクセスするためには、DataTypeCompatibility 初期化プロパティを ADO 接続文字列で設定する必要があります。

たとえば、次の Visual Basic Scripting Edition (VBScript) サンプルは、 サンプル データベースの テーブルにある、 Demographicsxml Sales.Store データ型の列である AdventureWorks2022 に対するクエリの結果を示しています。 具体的には、クエリは CustomerID3と等しい行のこの列のインスタンス値を検索します。

Const DS = "MyServer"
Const DB = "AdventureWorks2022"

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=MSOLEDBSQL" & _
                   ";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

この例は、DataTypeCompatibility を設定する方法を示しています。 SQL Server Native Client を使用している場合、このプロパティには既定値の 0 が設定されています。 この値を 80 に設定すると、SQL Server Native Client プロバイダーにより、xml 型およびユーザー定義型の列が SQL Server 2000 (8.x) データ型として示されます。 それぞれのデータ型は、DBTYPE_WSTR および DBTYPE_BYTES になります。

注意

SQL Server Native Client (SNAC と略されることがよくあります) は、SQL Server 2022 (16.x) と SQL Server Management Studio 19 (SSMS) から削除されました。 SQL Server Native Client (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。 今後、新しい Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server または最新の Microsoft ODBC Driver for SQL Server に切り替えてください。 SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。

この例をテストする

  1. SQL Server Native Client がクライアント コンピューターにインストールされており、クライアント コンピューターで MDAC 2.6.0 以降のバージョンを使用できることを確認します。

    詳細については、「 SQL Server Native Client プログラミング」を参照してください。

  2. SQL Server の AdventureWorks2022 サンプル データベースがインストールされていることを確認します。

    この例では AdventureWorks2022 サンプル データベースが必要です。

  3. この記事の前半に示したコードをコピーし、テキスト エディターまたはコード エディターに貼り付けます。 HandlingXmlDataType.vbs という名前でファイルを保存します。

  4. SQL Server インストールでの必要性に応じてスクリプトを変更し、変更を保存します。

    たとえば、MyServer が指定されている箇所は、(local) または SQL Server がインストールされているサーバーの実際の名前のいずれかに置き換える必要があります。

  5. HandlingXmlDataType.vbs を実行し、スクリプトを実行します。

結果は次のサンプル出力に似たものになります。

Row 1

<StoreSurvey xmlns="http://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="http://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>

ADO.NET を使用した、xml 型の列に含まれている XML の操作

ADO.NET および Microsoft .NET Framework を使用して、xml データ型の列に含まれている XML を処理するには、SqlCommand クラスの標準の動作を使用します。 たとえば、xml データ型の列とその値は、SqlDataReaderを使用して SQL 列を取得するときと同じ方法で取得できます。ただし、XML として xml データ型の列のコンテンツを使用して作業を行う場合は、最初にそのコンテンツを XmlReader 型に割り当てる必要があります。

詳細とコード例については、Microsoft .NET Framework 2.0 SDK ドキュメントの「データ リーダーの XML 列の値」を参照してください。

ADO.NET を使用した、パラメーター内の xml 型の列の操作

ADO.NET および .NET Frameworkでパラメーターとして渡された xml データ型を操作するには、SqlXml データ型のインスタンスとして値を指定することができます。 特殊な処理は必要ありません。SQL Server の xml データ型の列は、stringinteger などの他の列やデータ型と同じように、パラメーター値を受け取ることができます。

詳細とコード例については、Microsoft .NET Framework 2.0 SDK ドキュメントの「コマンド パラメーターとしての XML 値」を参照してください。

関連項目