CORRECÇÃO: O cancelamento de thread durante SqlCommand.ExecuteReader danificar SqlConnection conjunto

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.

319345
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Sintomas
Se as seguintes condições forem verdadeiras:
  • Uma consulta de longa duração que utiliza o método SqlClient.SqlCommand.ExecuteReader numa aplicação .NET multithread é cancelada.
  • Threads posteriormente utilizar a mesma cadeia de ligação para tentar ler dados utilizando SqlClient.SqlCommand.ExecuteReader .
receberá a seguinte mensagem de erro:
System.InvalidOperationException: Já existe um DataReader aberto associado a esta ligação que tem de ser fechada primeiro.
A pilha de chamadas poderá ser apresentada da seguinte forma:
at System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean executing)   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream)   at System.Data.SqlClient.SqlCommand.ExecuteReader()					
Causa
Quando o thread que interage com o objecto DataReader for interrompido, a ligação não pode ser limpo correctamente porque não é chamado o método SqlClient.SqlConnection.Close que contém o código de limpeza. Isto mantém a ligação num estado indeterminado e eventualmente faz com que o conjunto de ligação introduzir um estado inutilizável.
Resolução
Para resolver este problema, obtenha o service pack mais recente do Microsoft .NET Framework. Para obter mais informações, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
318836Como obter o service pack mais recente do .NET Framework
A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:
   Date            Version                                 Size              File name        --------------------------------------------------------------------   05-Mar-2002     1.0.3705.211    1,175,552 bytes   System.data.dll   29-Jan-2002                                  1,831,936 bytes   NDP10U318609.msp				

Ponto Da Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo. Este problema foi primeiro corrigido no Microsoft .NET Framework Service Pack 2 (SP2).
Excepção de SQL de pooling de adonet

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 319345 - Última Revisão: 02/09/2014 21:10:43 - Revisão: 5.1

  • Microsoft ADO.NET 1.0
  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbfix kbnetframe100presp2fix kbnetframe100sp2fix KB319345 KbMtpt
Esta informação foi útil?