ID do artigo: 310378 - Última revisão: segunda-feira, 13 de março de 2006 - Revisão: 2.1

Linha de dados XML é truncada no 2,033 caracteres quando você usa o objeto do SqlDataReader

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Este artigo se refere ao seguinte namespace Microsoft .NET Framework Class Library:
  • System.Data.SqlClient

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Quando você lê dados XML (Extensible Markup Language) do Microsoft SQL Server usando o objeto do SqlDataReader , o XML na primeira coluna da primeira linha é truncado no 2,033 caracteres. Você espera que todo o conteúdo dos dados XML estejam contidas em uma única linha e coluna.

Causa

Esse comportamento ocorre porque, para resultados XML mais 2,033 caracteres de comprimento, o SQL Server retorna o XML de várias linhas de 2,033 caracteres.

Resolução

Para resolver esse problema, use o método ExecuteXmlReader ler consultas FOR XML. Para obter informações adicionais sobre como usar ExecuteXmlReader com consultas SQL Server FOR XML, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
316016  (http://support.microsoft.com/kb/316016/ ) Como usar o método ExecuteXmlReader da classe SqlCommand no Visual Basic .NET
316701  (http://support.microsoft.com/kb/316701/ ) Como usar o método ExecuteXmlReader da classe SqlCommand no Visual translation from VPE for Csharp .NET
307224  (http://support.microsoft.com/kb/307224/ ) Como usar XML em aplicativos ADO.NET conectados e desconectados

Situação

Esse comportamento é por design.

Mais Informações

Etapas para reproduzir o problema

  1. Crie um novo aplicativo Console Visual Basic. Module1.vb é adicionado por padrão.
  2. Adicione o código a seguir na parte superior do módulo, acima da declaração do Módulo Module1 :
    Imports System
    Imports System.Data.SqlClient
    					
  3. Cole o código seguir o procedimento Sub Main do Module1:
       Dim strSQL As String = "SELECT * FROM Orders FOR XML AUTO, ELEMENTS"
       Dim sbXML As New System.Text.StringBuilder()
    
       Dim dr As SqlDataReader
       Dim cn As New SqlConnection("data source=SqlServerName;user id=login;password=password;initial catalog=Northwind;")
       Dim cmd As New SqlCommand(strSQL, cn)
    
       cn.Open()
       dr = cmd.ExecuteReader
    
       'Read the first Row
       dr.Read()
       'Get the first Column (index 0)
       sbXML.Append(dr.GetString(0))
    
       'Uncomment the following lines to retrieve all of the results
       'Do While dr.Read()
       '    sbXML.Append(dr.GetString(0))
       'Loop
    
       Console.WriteLine("Number of characters retrieved: " + sbXML.Length.ToString)
       Console.ReadLine()
    
       dr.Close()
       cn.Close()
    					
  4. Modifique a seguinte linha de código no exemplo de código anterior se conectar ao computador que está executando o SQL Server usando suas informações de logon real:
       Dim cn As New SqlConnection("data source=SqlServerName;user id=login;password=password;initial catalog=Northwind;")
    					
  5. Pressione F5 para compilar e executar o projeto.

    "Número de caracteres recuperado: 2033" é exibida na console janela, indicando que somente os caracteres primeiro 2,033 do conteúdo XML foram retornados.

    Pressione a tecla ENTER para fechar a janela de console e retornar para o ambiente de desenvolvimento.
  6. Descomente as linhas de código para recuperar todos os caracteres a seguir:
    'Do While dr.Read()
    '    sbXML.Append(dr.GetString(0))
    'Loop
    					
  7. Pressione F5 para recriar e executar o projeto.

    Todo o conteúdo XML são recuperados, conforme demonstrado pelo número exibido na janela do console.
  8. Pressione ENTER para fechar a janela de console e retornar para o ambiente de desenvolvimento.

A informação contida neste artigo aplica-se a:
  • Microsoft ADO.NET 2.0
  • Microsoft ADO.NET (included with the .NET Framework)
Palavras-chave: 
kbmt kbtshoot kbdatabase kbprb KB310378 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 310378  (http://support.microsoft.com/kb/310378/en-us/ )
Retired KB ArticleAviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.