CORRECÇÃO: Violação de acesso ao fechar o Recordset ADO em aplicativos multithread

Traduções deste artigo Traduções deste artigo
ID do artigo: 272373 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Ao executar o código ActiveX Data Objects (ADO) com vários segmentos sob carga excessiva alta em um computador com multiprocessamento, uma violação de acesso (VA) pode ocorrer quando fechar um Recordset do ADO. Exame da pilha de chamada no momento do antivírus (com os símbolos de depuração apropriados instalado) revela que a última chamada ADO na pilha é uma chamada para o ADO função interna msado15! CCollectionArray__Delete.

Resolução

Esse problema é corrigido no service packs mais recentes para Microsoft Windows 2000, o MDAC 2.5 e o MDAC 2.6 e no MDAC versão 2.7.
  • Para resolver esse problema, obtenha o service pack mais recente para o Windows 2000. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    260910Como obter o Service Pack mais recente do Windows 2000
  • Para resolver esse problema, obtenha o service pack mais recente para o Microsoft Data Access Components 2.5. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    293312INFO: Como obter o último MDAC 2.5 Service Pack
  • Para resolver esse problema, obtenha o service pack mais recente para o Microsoft Data Access Components 2.6. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    300635INFO: Como obter o último MDAC 2.6 Service Pack

Hotfix

A versão em inglês dessa correção ter os seguintes atributos de arquivo ou posteriores:
   Date         Version       Size      File name     Platform
   -----------------------------------------------------------
   09/15/2000   2.51.5715.0   487,696   Msado15.dll   x86 
				

Como Contornar

Evite fechar um Recordset do ADO e seu pai objeto ADO Connection exatamente ao mesmo tempo em threads diferentes 2, ou aplicar esse hotfix.

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no Microsoft Data Access Components (MDAC) 2.5 Service Pack 2, MDAC 2.6 Service Pack 1, MDAC 2.7 e Microsoft Windows 2000 Service Pack 2.

Mais Informações

Para reproduzir o problema, um Recordset do ADO e seu pai ADO conexão devem ser fechados ou lançadas em threads diferentes 2 exatamente ao mesmo tempo. Observe que esse problema foi somente com êxito reproduzido em uma máquina multiprocessador.

O problema inicial foi descoberto, usando as classes Java de ADO WFC (Windows Foundation Classes) em um aplicativo COM + sob carga excessiva com ADO definido como modo de segmentação livre. A Microsoft máquina virtual (Microsoft) submete-se a versão de objetos COM até que o coletor de lixo é ativado. Além disso, o coletor de lixo executa a versão do objeto COM em um segmento de plano de fundo. Se você fechar uma conexão de WFC ADO, isso coloca o ponteiro de interface ADO conexões COM em uma lista de ponteiros para limpeza futura pelo coletor de lixo. Se o código do aplicativo principal, em seguida, fecha um Recordset do ADO exatamente ao mesmo tempo que o thread de plano de fundo do coletor de lixo libera seu ponteiro de interface de ADO conexão pai, o VA pode ocorrer.

Propriedades

ID do artigo: 272373 - Última revisão: sexta-feira, 7 de abril de 2006 - Revisão: 8.1
A informação contida neste artigo aplica-se a:
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.6
Palavras-chave: 
kbmt kbqfe kbhotfixserver kbbug kbfix kbmdac250sp2fix kbmdac260sp1fix KB272373 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 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: 272373

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