Compartilhar via


Usar dados XML em aplicações

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Este artigo descreve as opções disponíveis para trabalhar com o tipo de dados xml em sua aplicações. O artigo contém informações sobre o seguinte:

  • Identificar o XML de uma coluna de tipo xml usando o ADO e o SQL Server Native Client

  • Tratando XML de uma coluna de tipo xml usando o ADO.NET

  • Tratando tipo xml em parâmetros usando o ADO.NET

Identificador XML de uma coluna de tipo xml ao usar o ADO e o SQL Server Native Client

Para usar componentes MDAC para acessar os tipos e recursos introduzidos no SQL Server 2005 (9.x), a propriedade de inicialização DataTypeCompatibility deve estar definida na cadeia de conexão do ADO.

Por exemplo, o exemplo a seguir do Visual Basic Scripting Edition (VBScript) mostra os resultados de uma consulta em uma coluna de tipo de dados xml , Demographics, na tabela Sales.Store do banco de dados AdventureWorks2022 de exemplo. Especificamente, a consulta procura o valor da instância dessa coluna para a linha em que o CustomerID é igual a 3.

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

Esse exemplo mostra como definir a propriedade de compatibilidade de tipo de dados. Por padrão, isso é definido como 0 ao usar o SQL Server Native Client. Se você definir o valor como 80, o provedor do SQL Server Native Client fará com que as colunas de tipo xml e definidas pelo usuário sejam exibidas como tipo de dados do SQL Server 2000 (8.x). Esses tipos são DBTYPE_WSTR e DBTYPE_BYTES, respectivamente.

Observação

O SQL Server Native Client (SNAC) não é fornecido com:

  • SQL Server 2022 (16.x) e versões posteriores
  • SQL Server Management Studio 19 e versões posteriores

O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o provedor OLE DB para SQL Server (SQLOLEDB) da Microsoft herdado não são recomendados para desenvolver um novo aplicativo.

Para novos projetos, use um dos seguintes drivers:

Para SQLNCLI que é fornecido como um componente do Mecanismo de Banco de Dados do SQL Server (versões 2012 a 2019), confira esta exceção de Ciclo de Vida de Suporte.

Testar este exemplo

  1. Verifique se o SQL Server Native Client está instalado e se o MDAC 2.6.0 ou posterior está disponível no computador cliente.

    Para obter mais informações, consulte Programação do SQL Server Native Client.

  2. Verifique se o banco de dados AdventureWorks2022 de exemplo no SQL Server está instalado.

    Esse exemplo requer o AdventureWorks2022 banco de dados da exemplo.

  3. Copie o código mostrado anteriormente neste artigo e cole-o em seu editor de texto ou de código. Salve o arquivo como HandlingXmlDataType.vbs.

  4. Modifique o script, conforme necessário, para sua instalação do SQL Server e salve as alterações.

    Por exemplo, quando MyServer estiver especificado, você deve substituir (local) ou o nome real do servidor no qual o SQL Server está instalado.

  5. Execute HandlingXmlDataType.vbs e execute o script.

Os resultados devem ser semelhantes à seguinte saída de exemplo:

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>

Identificador XML de uma coluna de tipo xml ao usar o ADO.NET

Para identificar XML em uma coluna de tipo de dados xmlao usar o ADO.NET e o Microsoft .NET Framework, é possível usar o comportamento padrão da classe SqlCommand. Por exemplo, uma coluna de tipo de dados xml e seus valores podem ser recuperados da mesma maneira como qualquer coluna SQL é recuperada usando um SqlDataReader. No entanto, caso deseje trabalhar com o conteúdo de uma coluna de tipo de dados xml como XML, você primeiro precisará atribuir o conteúdo a um tipo XmlReader.

Para obter mais informações e um código de exemplo, confira “Valores de coluna XML em um leitor de dados” na documentação do SDK do Microsoft .NET Framework 2.0.

Identificador de uma coluna de tipo xml em parâmetros ao usar o ADO.NET

Para identificar um tipo de dados xml passado como um parâmetro no ADO.NET e no .NET Framework, você pode fornecer o valor como uma instância do tipo de dados SqlXml. Nenhum identificador especial está envolvido porque as colunas de tipo de dados xml no SQL Server podem aceitar valores de parâmetros da mesma maneira que outras colunas e tipos de dados, como cadeia de caracteres ou inteiro.

Para obter mais informações e um código de exemplo, confira “Valores de XML como parâmetro de comando” na documentação do SDK do Microsoft .NET Framework 2.0.

Confira também