CORRECÇÃO: Fornecedor SQLOLEDB incorrectamente deixa transacção aberta

Traduções de Artigos Traduções de Artigos
Artigo: 281633 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
N.º DE BUGS: 58292 (SQLBUG_70)
N.º DE BUGS: 235846 (SHILOH)
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Executar uma determinada sequência de comandos que envolvam transacções explícitas e parâmetros num programa de aplicação utilizando o fornecedor SQLOLEDB incorrectamente deixa uma transacção aberta. Isto pode causar bloquear grave e outros problemas.

Causa

Apesar da opção de SET 'implicit_transactions' está definida como desactivada, o fornecedor SQLOLEDB está a abrir uma transacção implícita.

Resolução

MDAC 2.6

Para resolver este problema, obtenha o service pack mais recente do Microsoft Data Access Components 2.6. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
300635Como obter o service pack mais recente do MDAC 2.6

Correcção

importante : deve ser instalado, Microsoft Data Access Components versão 2.6 antes de aplicar esta correcção.

A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:
   Date       Time     Version     Size      File name      Platform
   -----------------------------------------------------------------
   11/22/00   8:43pm   8.00.0225   491,584   Sqloledb.dll   Intel
   11/22/00   8:43pm   8.00.0225    61,440   Sqloledb.rll   Intel
				
NOTA: devido a dependências de ficheiros, a correcção mais recente ou funcionalidade que contém os ficheiros acima pode também conter ficheiros adicionais.

Como contornar

Para contornar este problema, efectue um dos seguintes procedimentos:
  • Utilizar o fornecedor de OLEDB para ODBC em vez do SQLOLEDB fornecedor.

    - ou -
  • Colocar transacções adicionais à volta do código que cria o problema.

Ponto Da Situação

A Microsoft confirmou que este é um problema no Microsoft OLE DB Provider para SQL Server está incluído nas versões Microsoft Data Access Components (MDAC) 2.1, 2.5 e 2.6.

MDAC 2.6

Este problema foi corrigido pela primeira vez no Microsoft Data Access Components 2.6 Service Pack 1.


MDAC 2.5

Este problema foi primeiro corrigido na versão do Sqlredis.exe incluída no Microsoft SQL Server 7.0 Service Pack 4.

Mais Informação

A rastrear a aplicação, pode ver no SQL Server Profiler que o fornecedor SQLOLEDB está a enviar as seguintes instruções para o SQL Server:
SET FMTONLY ON select ... SET FMTONLY OFF
set implicit_transactions off SET NO_BROWSETABLE OFF
				
este faz com que um ' implicit_transaction ' já a ser aberto.

Quando utilizar o fornecedor de OLEDB para ODBC e o controlador do SQL Server, o mesmo código de Visual Basic/ADO envia as seguintes instruções ao SQL Server:
set implicit_transactions off SET NO_BROWSETABLE OFF
SET FMTONLY ON select  ... SET FMTONLY OFF
				
assim o SELECT FMTONLY abre uma transacção implícita com SQLOLEDB. No entanto, uma vez que a aplicação nunca abriu esta transação, a aplicação nunca normalmente fechará-lo. Esta transacção só irá ser fechada após a próxima transacção explícita.

Propriedades

Artigo: 281633 - Última revisão: 24 de fevereiro de 2014 - Revisão: 6.4
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbfix kbmdac260sp1fix kbqfe KB281633 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: 281633

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