KB969845 - CORREÇÃO: mensagem de erro ao executar um pacote do SQL Server 2005, SQL Server 2008 ou SQL Server pacote dos Serviços de Integração (SSIS) 2008 R2 após instalar o .NET Framework 2.0 SP2 ou o .NET Framework 3.5 SP1: "Origem ADO NET [1424]"

Aplica-se A
Microsoft SQL Server 2005 Standard Edition Microsoft SQL Server 2005 Developer Edition Microsoft SQL Server 2005 Enterprise Edition Microsoft SQL Server 2005 Standard X64 Edition Microsoft SQL Server 2005 Enterprise X64 Edition Microsoft SQL Server 2005 Workgroup Edition SQL Server 2008 Standard SQL Server 2008 Standard Edition for Small Business SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Workgroup SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup

A Microsoft distribui correções do Microsoft SQL Server 2005, Microsoft SQL Server 2008 e Microsoft SQL Server 2008 R2 como um ficheiro transferível. Uma vez que as correções são cumulativas, cada nova versão contém todas as correções e todas as correções de segurança incluídas na versão anterior SQL Server 2005, Microsoft SQL Server 2008 ou SQL Server versão de correção de 2008 R2.

Sintomas

Tenha em conta o seguinte cenário:

  • Executa um pacote do Microsoft SQL Server 2005, Microsoft SQL Server 2008 ou SQL Server pacote de Serviços de Integração (SSIS) de 2008 R2 num computador com uma das seguintes instalações .NET Framework:

    • O .NET Framework 2.0 Service Pack 2 (SP2)
    • O .NET Framework 3.5 Service Pack 1 (SP1)
  • O pacote SSIS utiliza um controlador ODBC de terceiros que importa dados de carateres.

No entanto, quando executa o pacote do SSIS, recebe as seguintes mensagens de erro:

Nota

[Origem ADO NET [1424]] Erro: Código de Erro do SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. O "componente "Origem ADO NET" (1424)" falhou porque o código de erro 0x80131937 ocorreu e a disposição da linha de erro na "coluna de saída "columnname" (Número)" especifica a falha no erro. Ocorreu um erro no objeto especificado do componente especificado. Podem existir mensagens de erro publicadas antes desta situação com mais informações sobre a falha.

Erro 0xc0209029: Fluxo de Dados Tarefa: O "componente "ComponentName" (1)" falhou porque o código de erro 0x80131937 ocorrido...

[Origem ADO NET [1424]] Erro: O componente "Origem ADO NET" (1424) não conseguiu processar os dados. O componente do pipeline devolveu o código de erro HRESULT 0xC0209029 de uma chamada de método.

[SSIS. Pipeline] Erro: Código de Erro do SSIS DTS_E_PRIMEOUTPUTFAILED. O método PrimeOutput no componente "Origem ADO NET" (1424) devolveu o código de erro 0xC02090F5. O componente devolveu um código de falha quando o motor de pipeline chamou PrimeOutput(). O significado do código de falha é definido pelo componente, mas o erro é fatal e o pipeline deixou de ser executado. Podem existir mensagens de erro publicadas antes desta situação com mais informações sobre a falha.

Este problema afeta os controladores ODBC que são acedidos a partir do fornecedor ODBC gerido quando as seguintes condições são verdadeiras:

  • A função ExecuteReader é chamada pelo parâmetro CommandBehavior.SequentialAccess. Esta chamada e parâmetro são utilizados nas seguintes circunstâncias:

    • Quando um pacote SSIS do SQL Server 2005 lê dados de uma origem do DataReader ou quando um pacote SSIS do SQL Server 2008 lê dados de uma origem de dados ADO.NET gerida.
    • A origem de dados não está configurada para redirecionar os valores de erro e truncamento.
  • A função OdbcDataReader.IsDbNull é chamada. O pacote SSIS utiliza este método para determinar se o valor num campo é NULO ou não.

  • Uma das seguintes funções é denominada:

    • A função OdbcDataReader.GetBytes é chamada para obter determinados tipos de dados, como DT_BYTES, do fornecedor ODBC gerido.
    • A função OdbcDataReader.GetChars é chamada para obter determinados tipos de dados de cadeia, como DT_WSTR, do fornecedor ODBC gerido.

Causa

O .NET Framework 2.0 SP2 e o .NET Framework 3,5 SP1 introduzem uma alteração no fornecedor ODBC gerido pelo qual as cadeias são lidas a partir do controlador ODBC nativo no cenário descrito na secção "Sintomas". Devido a esta alteração, o fornecedor ODBC gerido que é chamado no controlador ODBC nativo com a função da API SQLGetData utiliza uma memória intermédia de tamanho 0. Os controladores ODBC compatíveis não têm problemas nesta chamada. No entanto, os controladores ODBC não conformes podem falhar nestas circunstâncias. Para um controlador ODBC compatível, a função API SQLGetData devolve SUCCESS_WITH_INFO quando é detetada uma memória intermédia do tamanho 0. Para um controlador ODBC não conforme, a chamada devolve NO_DATA.

Resolução

Informações de correção

Está disponível uma correção suportada da Microsoft. No entanto, esta correção destina-se a corrigir apenas o problema descrito neste artigo. Aplique esta correção apenas a sistemas com este problema específico. Esta correção poderá receber testes adicionais. Por conseguinte, se não for gravemente afetado por este problema, recomendamos que aguarde pela próxima atualização de software que contém esta correção.

Se a correção estiver disponível para transferência, existe uma secção "Transferência de correção disponível" na parte superior deste artigo da Base de Dados de Conhecimento. Se esta secção não for apresentada, contacte o Suporte ao Cliente e o Suporte da Microsoft para obter a correção.

Nota Se ocorrerem problemas adicionais ou se for necessária alguma resolução de problemas, poderá ter de criar um pedido de serviço separado. Os custos de suporte habituais serão aplicados a perguntas e problemas de suporte adicionais que não se qualificam para esta correção específica. Para obter uma lista completa dos números de telefone do Suporte ao Cliente e suporte da Microsoft ou para criar um pedido de serviço separado, visite o seguinte Web site da Microsoft:

http://support.microsoft.com/contactus/?ws=support Nota O formulário "Transferência de correção disponível" apresenta os idiomas para os quais a correção está disponível. Se não vir o seu idioma, é porque não está disponível uma correção para esse idioma.

Pré-requisitos

Tem de ter o .NET Framework 2.0 Service Pack 2 instalado.

Informações para reiniciar

Não tem de reiniciar o computador depois de aplicar esta correção.

Informações de registo

Não tem de alterar o registo.

Informações do ficheiro de correção

Esta correção contém apenas os ficheiros necessários para corrigir os problemas apresentados neste artigo. Esta correção pode não conter todos os ficheiros que tem de atualizar totalmente um produto para a compilação mais recente. A versão em inglês desta correção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) que estão listados na tabela seguinte. As datas e horas destes ficheiros estão listadas na Hora Universal Coordenada (UTC). Quando vê as informações do ficheiro, estas são convertidas para a hora local. Para encontrar a diferença entre a hora UTC e a hora local, utilize o separador Fuso Horário no item Data e Hora no Painel de Controlo.

.NET Framework 2.0 para Windows 2000, Windows Server 2003, Windows XP, versões de 32 bits

Nome de ficheiro Versão do ficheiro Tamanho do ficheiro Data Hora Plataforma
System.data.dll 2.0.50727.4063 2,933,760 19- 05:08 x86

.NET Framework 2.0 para Windows 2000, Windows Server 2003, Windows XP, versões x64

Nome de ficheiro Versão do ficheiro Tamanho do ficheiro Data Hora Plataforma
System.data.dll 2.0.50727.4063 3,008,512 18- 23:51 x64
System.data.dll 2.0.50727.4063 2,933,760 19- 05:08 x86

.NET Framework 2.0 para Windows 2000, Windows Server versões 2003, Windows XP, IA-64

Nome de ficheiro Versão do ficheiro Tamanho do ficheiro Data Hora Plataforma
System.data.dll 2.0.50727.4063 2,933,760 19- 05:08 x86
System.data.dll 2.0.50727.4063 3,234,816 19- 01:09 IA-64

.NET Framework 2.0 para Windows Vista, versões de 32 bits Windows Server 2008

Nome de ficheiro Versão do ficheiro Tamanho do ficheiro Data Hora
System.data.dll 2.0.50727.4400 2,933,760 10-Set-2009 11:54

.NET Framework 2.0 para Windows Vista, versões Windows Server 2008 e x64

Nome de ficheiro Versão do ficheiro Tamanho do ficheiro Data Hora
System.data.dll 2.0.50727.4400 3,008,512 10-Set-2009 11:54

.NET Framework 2.0 para Windows Vista, versões Windows Server 2008, IA-64

Nome de ficheiro Versão do ficheiro Tamanho do ficheiro Data Hora
System.data.dll 2.0.50727.4400 3,234,816 10-Set-2009 11:54

Solução

Para contornar este problema, utilize um dos seguintes métodos.

Método 1

Edite o pacote do SSIS para configurar o Redirecionamento de Erros e Truncamento na origem do DataReader ou na origem de dados ADO.NET gerida. Depois de editar o pacote do SSIS para redirecionar a saída do erro para um destino, o pacote será executado com êxito, mesmo que não sejam escritas linhas no destino. Para tal, siga estes passos.

Nota Os passos seguintes partem do princípio de que está a utilizar um pacote SSIS do SQL Server 2005 que lê dados de uma origem do DataReader.

  1. Abra o pacote do SSIS no SQL Server Business Intelligence Development Studio.

  2. Abra a caixa de diálogo Editor Avançado de Origem do DataReader no estruturador de Fluxo de Dados.

  3. Clique no separador Propriedades de Entrada e Saída e, em seguida, expanda o nó Saída do DataReader na árvore Entradas e saídas .

  4. Expanda o nó Colunas de Saída .

  5. Clique em cada coluna sob o nó Colunas de Saída e, em seguida, examine a propriedade DataType. Para cada coluna cuja propriedade DataType seja DT_WSTR, DT_NTEXT, DT_BYTES ou DT_IMAGE, edite as duas propriedades seguintes:

    • Defina a propriedade ErrorRowDisposition como RD_RedirectRow.
    • Defina a propriedade TruncationRowDisposition como RD_RedirectRow.
  6. Clique em OK para guardar as alterações.

  7. No estruturador de Fluxo de Dados, adicione um novo destino. Por exemplo, adicione um destino de ficheiro simples ou um destino SQL Server.

  8. Utilize a seta vermelha da origem do DataReader para ligá-la ao destino adicionado recentemente. Esta operação direcionará as linhas de erro e as linhas de truncagem para o destino para guardar as linhas de erro.

  9. Repita os passos 1 a 8 para todas as tarefas Fluxo de Dados que acedem a colunas de carateres ou imagens ODBC e que falham com as mensagens de erro mencionadas na secção "Sintomas".

Método 2

Desinstale o .NET Framework 2.0 SP2 ou o .NET Framework 3,5 SP1. No entanto, não recomendamos que desinstale um service pack porque isto sacrifica a fiabilidade, as melhorias de funcionalidades e as otimizações de desempenho que o service pack oferece.

Para restaurar o sistema para o estado em que se encontrava antes de instalar o .NET Framework 2.0 SP2 ou o .NET Framework 3.5 SP1, siga estes passos:

  1. No Painel de Controlo, faça duplo clique em Adicionar ou Remover Programas.

  2. Localize o Microsoft .NET Framework 3.5 SP1 e, em seguida, desinstale-o.

  3. Localize o Microsoft .NET Framework 3.0 SP2 e, em seguida, desinstale-o.

  4. Localize o Microsoft .NET Framework 2.0 SP2 e, em seguida, desinstale-o.

  5. Reinstale a versão original do .NET Framework 3.5. Este passo irá reinstalar o .NET Framework 2.0 SP1 e o .NET Framework 3.0 SP1. Para obter o .NET Framework 3.5, visite o seguinte Web site da Microsoft:
    http://www.microsoft.com/download/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en

Método 3

Contacte o fornecedor do controlador ODBC de terceiros para determinar se o fornecedor tem uma atualização para o controlador resolver este problema.

Estado

A Microsoft confirmou que se trata de um problema nos produtos Microsoft listados na secção "Aplica-se a".