アプリケーションでの XML データ型の使用
このトピックでは、アプリケーションで 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 に導入された型や機能にアクセスするためには、DataTypeCompatibility 初期化プロパティを ADO 接続文字列で設定する必要があります。
たとえば、次の Visual Basic Scripting Edition (VBScript) サンプルは、AdventureWorks2008R2 サンプル データベースの Sales.Store テーブルにある、xml データ型の列である Demographics に対するクエリの結果を示しています。具体的には、クエリは CustomerID が 3 と等しい行のこの列のインスタンス値を検索します。
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
この例は、DataTypeCompatibility を設定する方法を示しています。SQL Server Native Client を使用している場合、このプロパティには既定値の 0 が設定されています。この値を 80 に設定すると、SQL Server Native Client プロバイダーにより、xml 型およびユーザー定義型の列が SQL Server 2000 データ型として示されます。それぞれのデータ型は、DBTYPE_WSTR および DBTYPE_BYTES になります。
SQL Server Native Client はクライアント コンピューターにもインストールし、データ プロバイダーとして使用するために、"Provider=SQLNCLI10;..." を含む接続文字列を指定する必要があります。
この例をテストするには
SQL Server Native Client がクライアント コンピューターにインストールされており、クライアント コンピューターで MDAC 2.6.0 以降のバージョンを使用できることを確認します。
詳細については、「SQL Server 2008 R2 Native Client プログラミング」を参照してください。
SQL Server の AdventureWorks2008R2 サンプル データベースがインストールされていることを確認します。
この例では AdventureWorks2008R2 サンプル データベースが必要です。詳細については、「SQL Server のサンプルとサンプル データベースのインストールに関する注意点」を参照してください。
このトピックの前半に示したコードをコピーし、テキスト エディターまたはコード エディターに貼り付けます。HandlingXmlDataType.vbs という名前でファイルを保存します。
SQL Server インストールでの必要性に応じてスクリプトを変更し、変更を保存します。
たとえば、MyServer が指定されている箇所は、(local) または SQL Server がインストールされているサーバーの実際の名前のいずれかに置き換える必要があります。
HandlingXmlDataType.vbs を実行し、スクリプトを実行します。
結果は次のサンプル出力に似たものになります。
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>
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 Column Values in a Data Reader」を参照してください。
ADO.NET を使用した、パラメーター内の xml 型の列の操作
ADO.NET および .NET Framework でパラメーターとして渡された xml データ型を操作するには、SqlXml データ型のインスタンスとして値を指定することができます。特殊な処理は必要ありません。SQL Server の xml データ型の列は、string や integer などの他の列やデータ型と同じように、パラメーター値を受け取ることができます。
詳細とコード例については、Microsoft .NET Framework 2.0 SDK のマニュアルの「XML Values as Command Parameters」を参照してください。