Mensagem de erro quando você tenta procurar um relatório no SQL Server 2005 Reporting Services: "O XML de entrada não é válido"

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: 914159
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Quando você tenta procurar um relatório no Microsoft SQL Server 2005 Reporting Services, você receberá uma mensagem de erro semelhante à seguinte:
A entrada XML não é válida. Um ou mais elementos está faltando uma marca de fechamento ou tem marcas não correspondentes. (rsMalformedXml)
Char, valor hexadecimal AscCode, é um caractere inválido. Linha 20, posicione 18.
Observação Essa mensagem de erro, Char é um espaço reservado para um caractere não-imprimível. Além disso, AscCode é um espaço reservado para o código do caractere do caractere não-imprimível.
Causa
Esse problema ocorre porque um caractere não-imprimível é preenchido em um parâmetro de relatório que você define no relatório.
Como Contornar
Para contornar este problema, use um dos seguintes métodos:
  • Remove o caractere não-imprimível os valores disponíveis para o parâmetro de relatório.
  • Converta o caractere não-imprimível para o caractere imprimível os valores disponíveis para o parâmetro de relatório. Em seguida, converter o caractere imprimível de volta para o caractere não-imprimível os valores para o parâmetro de consulta.

Solução de exemplo

O exemplo a seguir mostra como solução alternativa para esse problema. Neste exemplo, as seguintes suposições são feitas:
  • O parâmetro de relatório do DEP é definido e é preenchido com caracteres não imprimíveis.
  • A coluna nome contém caracteres não imprimíveis. A coluna de nome está o dataset dataSet1 e o dataset Dataset2.
  • O valor disponível para o parâmetro de relatório do DEP é de uma consulta no dataset dataSet1.
  • O valor para o parâmetro de relatório DEP é passado para o dataset Dataset2 como @ DEP parâmetro na seqüência de consulta de dataset Dataset2.
  • O intervalo de códigos de caracteres dos caracteres não-imprimíveis que você enfrenta é de 2 a 8.
  • A função MyEncodingFunc e a função MyDecodingFunc são definidos. A função MyEncodingFunc analisa a seqüência de entrada. Com base no parâmetro faixa , a MyEncodingFunc função ou converte os caracteres não-imprimíveis para o << char (N)>> seqüência de caracteres ou remove caracteres não imprimíveis. A função MyDecodingFunc faz o oposto.

    anotações
    • Um exemplo de código para a função MyEncodingFunc e para a função MyDecodingFunc é fornecido neste artigo.
    • Né um espaço reservado para o código do caractere do caractere não-imprimível.
Para contornar esse problema, execute estas etapas:
  1. Coloque o código para a função MyEncodingFunc e para a função MyDecodingFunc na caixa código personalizado . Um exemplo de código é fornecido neste artigo. Para acessar a caixa de código personalizado , execute estas etapas:
    1. No menu Report , clique em Propriedades do relatório .
    2. Clique na guia código .
  2. Adicione um campo calculado para o dataset dataSet1. Para fazer isso, execute as seguintes etapas:
    1. Na janela Datasets, clique o dataset com o botão direito do mouse e, em seguida, clique em Adicionar .
    2. Na caixa nome , digite um nome. Neste exemplo, digite o nome MyCalculatedField .
    3. Clique em campo calculado e, em seguida, digite = code.MyEncodingFunc(Fields!FirstName.Value,False) .
    4. Clique em OK .
  3. Adicione outro campo calculado ao dataset dataSet1. Para fazer isso, execute as seguintes etapas:
    1. Na janela Datasets, clique o dataset com o botão direito do mouse e, em seguida, clique em Adicionar .
    2. Na caixa nome , digite um nome. Neste exemplo, digite o nome MyDisplayField .
    3. Clique em campo calculado e, em seguida, digite = code.MyEncodingFunc(Fields!ColumnName.Value,True) .
    4. Clique em OK .
  4. No menu Report , clique em Parâmetros de relatório .
  5. No painel esquerdo, clique no parâmetro de relatório DEP .
  6. No painel direito, clique em MyCalculatedField na lista de campo de valor e, em seguida, clique em MyDisplayField na lista campo de rótulo .
  7. Clique em OK .
  8. No Report Designer, clique na guia dados e clique em Dataset2 na lista de DataSet .
  9. Clique no botão reticências e, em seguida, clique na guia parâmetros .
  10. Defina um novo parâmetro de consulta especificando o nome. Neste exemplo, digite o nome MyQParam . Para o valor do parâmetro de consulta MyQParam , digite =Code.MyDecodingFunc(Parameters!DEP.Value) .
  11. Na seqüência de consulta de dataset Dataset2, substituir @ DEP parâmetro com @ MyQParam consulta parâmetro.
Este exemplo remove caracteres não imprimíveis do parâmetro de relatório DEP . O parâmetro de relatório do DEP é exibido como uma lista. Você ainda pode ver os caracteres não-imprimíveis o relatório para a coluna nome . Para remover caracteres não imprimíveis do relatório para a coluna nome , execute essas etapas:
  1. No Report Designer, clique na guia layout .
  2. Altere o conteúdo da linha de detalhe da coluna nome do =Fields!FirstName.Value para =code.MyEncodingFunc(Fields!FirstName.Value,True) .
O exemplo de código a seguir é o código para a função MyEncodingFunc e para a função MyDecodingFunc .
Public Function MyEncodingFunc(ByVal strIn, ByVal Strip) As String        'The value of the Strip parameter determines whether the nonprintable character is stripped from the input string.        Dim n As Integer        Dim resStr As String        Dim tempStr As String        resStr = ""        For n = 1 To Strings.Len(strIn)            tempStr = Mid(strIn, n, 1)            If ((Asc(tempStr) >= 2) And (Asc(tempStr) <= 8)) Then                If Strip = False Then                    resStr = resStr + "<<Char(" + Convert.ToString(Asc(tempStr)) + ")>>"                End If            Else                resStr = resStr + tempStr            End If        Next        Return resStrEnd FunctionPublic Function MyDecodingFunc(ByVal strIn) As String        Dim n As Integer        Dim resStr As String        Dim tempStr As String        resStr = ""        For n = 1 To Strings.Len(strIn)            If Mid(strIn, n, 7) = "<<Char(" Then                tempStr = ""                n = n + 7                Do Until Mid(strIn, n, 1) = ")"                    tempStr = tempStr + Mid(strIn, n, 1)                    n = n + 1                Loop                n = n + 2                resStr = resStr + Chr(Convert.ToInt32(tempStr))            Else                resStr = resStr + Mid(strIn, n, 1)            End If        Next        Return resStrEnd Function
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Propriedades

ID do Artigo: 914159 - Última Revisão: 12/09/2015 04:35:11 - Revisão: 1.2

Microsoft SQL Server 2005 Reporting Services

  • kbnosurvey kbarchive kbmt kbsqlclient kbsql2005rs kbexpertiseadvanced kbtshoot kbprb KB914159 KbMtpt
Comentários