CORRECÇÃO: System.ArgumentOutOfRangeException intermitentemente ocorre com o ADO.NET

Traduções de Artigos Traduções de Artigos
Artigo: 836874 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sintomas

Numa aplicação ADO.NET, poderá receber a seguinte mensagem de excepção intermitentemente:
System.ArgumentOutOfRangeException: Índice estava fora do intervalo. Tem de ser não negativo e menor que o tamanho da colecção. Nome do parâmetro: índice

Causa

Recebe esta mensagem de erro se criar ou destruir objectos relacionados com o DataSet (como os objectos de DataView ) num processador de eventos para um objecto de DataSet ou um objecto que está associado a um objecto DataSet . Por exemplo, este erro foi reproduzido numa aplicação que continha um controlo de grelha que estava a criar objectos de DataView subordinados num processador de eventos ListChanged para a grelha. Isto permite que o estado interno do objecto subjacente DataSet alterar durante uma operação onde deve permanecer estática.

Resolução

Agora é disponibilizada pela Microsoft uma correcção suportada, mas destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em sistemas que tenham este problema específico. Esta correcção poderá submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde pelo próximo service pack que contenha esta correcção.

Para resolver este problema imediatamente, contacte o suporte técnico da Microsoft para obter a correcção. Para obter uma lista completa de números de telefone do suporte técnico da Microsoft e informações sobre os custos de suporte, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota Em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados, se um técnico de suporte da Microsoft determinar que uma actualização específica resolverá o problema. Os custos normais do suporte serão aplicados a problemas adicionais e questões de suporte que não se enquadrem na atualização específica em questão.A versão inglesa desta correcção tem os atributos de ficheiro (ou posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas no formato de universal hora (UTC) coordenada Coordinated. Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário na ferramenta Data e hora no painel de controlo.
   Date         Time   Version            Size    File name
   --------------------------------------------------------------
   02-Mar-2004  18:39  1.1.4322.1007   1,294,336  System.data.dll                                             

Como contornar

Não criar nem destruir objectos relacionados com o DataSet (como os objectos de DataView ) dentro de um processador de eventos para um objecto de DataSet .

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a" deste artigo.
A pilha de chamadas para esta excepção depende da funcionalidade da aplicação e a causa exacta do erro. Seguem-se dois exemplos que ocorreram quando são criados objectos de DataView subordinados no processador de eventos ListChanged para um controlo:

Pilha de chamadas de exemplo 1

System.Collections.ArrayList.get_Item(Int32 index)
Sstem.Data.DataTable.RecordStateChanged(Int32 record1, DataViewRowState oldState1, DataViewRowState newState1, Int32 record2, DataViewRowState oldState2, DataViewRowState newState2)
System.Data.DataTable.SetNewRecord(DataRow row, Int32 proposedRecord, DataRowAction action, Boolean isInMerge)
System.Data.DataRow.EndEdit()
System.Data.DataRow.set_Item(DataColumn column, Object value)
System.Data.DataRow.set_Item(String columnName, Object value)

Pilha de chamadas de exemplo 2

System.Collections.ArrayList.get_Item(Int32 index)
System.Data.DataTable.ResetIndexes()
System.Data.Merger.MergeTable(DataTable src, DataTable dst)
System.Data.Merger.MergeTableData(DataTable src)
System.Data.Merger.MergeDataSet(DataSet source)
System.Data.DataSet.Merge(DataSet dataSet, Boolean preserveChanges, MissingSchemaAction missingSchemaAction)

Nota Estes são apenas exemplos e não são as única pilhas de chamadas que poderão ocorrer com este erro.

Referências

Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
824684Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft
Para obter informações adicionais sobre uma excepção semelhante que ocorre com uma versão anterior do ADO.NET, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
332215CORRECÇÃO: "System.ArgumentOutOfRangeException: índice estava fora do intervalo" erro ocorre com SqlClient.SqlConnection.Open()
Nota A correcção para o artigo da base de dados de conhecimento da Microsoft 332215 já está incluída no .NET Framework versão 1.1.

Propriedades

Artigo: 836874 - Última revisão: 1 de junho de 2006 - Revisão: 2.1
A informação contida neste artigo aplica-se a:
  • Microsoft ADO.NET 1.1
Palavras-chave: 
kbmt kbhotfixserver kbqfe KB836874 KbMtpt
Traduçã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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 836874
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com