CORRECÇÃO: O objeto OdbcConnection não relata um erro quando você especificar um nível de isolamento de transação que não há suporte para a fonte de dados no .NET Framework 2.0

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

Neste artigo

Sintomas

Considere o seguinte cenário. Você use o Microsoft .NET Framework Data Provider para ODBC no .NET Framework 2.0 para conectar a uma fonte de dados em seu aplicativo. Você, em seguida, use o método BeginTransaction (Iniciar transação) do objeto OdbcConnection para iniciar uma transação. Você especifica um nível de isolamento de transação que não é suportado pela fonte de dados para a transação. Nesse cenário, a exceção OdbcException não ocorre conforme o esperado. No entanto, a exceção ocorre conforme esperado quando você usar o .NET Framework 1.1.

Causa

Esse problema ocorre porque o método BeginTransaction (Iniciar transação) não relate o erro ODBC (SQL_ERROR) que SQLSetConnectAttr funciona retorna. AutoConfirmar modo é o modo de gerenciamento de transação padrão para o .NET Framework Data Provider para ODBC. O provedor de dados apenas desativa o AutoConfirmar modo quando o nível de isolamento de transação é definido corretamente. Portanto, se você especificar um nível de isolamento de transação incorreta, a transação não funciona. Se você chamar o método Commit ou o método Rollback , eles são inválidos. O método Commit e o método Rollback não informam o erro ODBC (SQL_ERROR).

Resolução

Um hotfix com suporte foi disponibilizada pela Microsoft. No entanto, destina-se a corrigir o problema descrito neste artigo. Aplique-o somente aos sistemas que apresentarem esse problema específico. Esta correcção poderá submetida a testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde o próximo NET Framework 2.0 Service Pack que contém esse hotfix.

Para resolver esse problema imediatamente, contate o Microsoft Customer Atendimento para obter o hotfix. Para obter uma lista completa de telefones do serviço de suporte a clientes da Microsoft e informações sobre os custos de suporte, visite o seguinte site:
http://support.microsoft.com/contactus/?ws=support
Observação Em alguns casos, as taxas cobradas pelas ligações para chamadas de suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados a questões e problemas que não se qualificam à atualização específica em questão de suporte adicionais.

Pré-requisitos

Para aplicar esse hotfix, você deve ter o Microsoft suporta arquivos que estão descritos no seguinte artigo da Base de dados de Conhecimento da Microsoft instalado no seu computador:
916002CORRECÇÃO: Mensagem de erro ao tentar usar a classe SqlClient em um aplicativo baseado no ADO.NET 2.0 para se conectar a uma instância do SQL Server 2005: "nova solicitação não está autorizada a iniciar porque ele deve vir com descritor de transação válido"

Requisitos de reinicialização

Não é necessário reiniciar o computador após aplicar esse hotfix.

Informações do registro

Não é necessário alterar o registro.

Informações sobre o arquivo de hotfix

Esse hotfix contém apenas os arquivos que são necessárias para corrigir os problemas que este artigo lista. Este hotfix pode não conter todos os arquivos que você deve ter para actualizar completamente um produto para a compilação mais recente.A versão em inglês deste hotfix tem atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos estão listadas no horário de universal coordenado (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário no item Data e hora no painel de controle.

Versão de 32 bits do .NET framework 2.0

Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Mscordacwks.dll2.0.50727.158800,76824 De maio de 200614: 59x 86
Mscorlib.dll2.0.50727.1584,317,18424 De maio de 200614: 59x 86
Mscorwks.dll2.0.50727.1585,623,29624 De maio de 200614: 59x 86
Sos.dll2.0.50727.158377,34424 De maio de 200614: 59x 86
System.Data.dll2.0.50727.1582,893,82424 De maio de 200614: 59x 86

.NET framework 2.0 x versão 64

Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Mscordacwks.dll2.0.50727.1581,597,44024 De maio de 200606: 09x 64
Mscorlib.dll2.0.50727.1583,956,73624 De maio de 200611: 25x 64
Mscorwks.dll2.0.50727.15810,306,04824 De maio de 200606: 05x 64
Sos.dll2.0.50727.158476,16024 De maio de 200606: 15x 64
System.Data.dll2.0.50727.1582,959,87224 De maio de 200611: 25x 64

Versão de arquitetura Itanium do .NET framework 2.0

Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
Mscordacwks.dll2.0.50727.1582,710,01624 De maio de 200606: 14IA-64
Mscorlib.dll2.0.50727.1583,956,73624 De maio de 200612: 03IA-64
Mscorwks.dll2.0.50727.15821,260,28824 De maio de 200606: 11IA-64
Sos.dll2.0.50727.158857,08824 De maio de 200606: 22IA-64
System.Data.dll2.0.50727.1583,102,20824 De maio de 200612: 03IA-64

Como Contornar

Para contornar este problema, certifique-se que você use o nível de isolamento de transação correto. Você pode adicionar código para o aplicativo para verificar se o nível de transação está correto e lançar uma exceção no seu código.

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Mais Informações

Para obter mais informações sobre o esquema para nomeação para atualizações do Microsoft SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
822499Novo esquema para nomeação para pacotes de atualização de software do Microsoft SQL Server

Para obter mais informações sobre terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software

Mais Informações

Esse problema pode causar corrupção de dados porque você não pode usar o método Rollback . Por exemplo, você pode especificar um nível de transação incorreto. Você espera que uma reversão de ocorrer se ocorrer corrupção de dados. No entanto, a reversão não ocorre. Porque o método Commit não relate o erro, corrupção de dados pode ocorrer porque os dados podem não ter sido confirmados conforme o esperado.

Etapas para reproduzir o problema

  1. Criar um arquivo de dados do Microsoft Access (.mdb) e, em seguida, crie uma tabela que contém duas colunas. Parta do princípio de que o arquivo de dados é salvo na pasta d:\db1.mdb e que o nome da tabela é T1. Suponha que as duas colunas são nomeadas C1 e C2.
  2. Inseri alguns registros na tabela T1.
  3. Criar um projeto translation from VPE for Csharp usando Microsoft Visual Studio 2005 e cole o seguinte código em um método.
    string cnstr = @"Driver={Microsoft Access Driver (*.mdb)};DBQ=d:\db1.mdb;UID=Admin;PWD=;"
    OdbcConnection cn = new OdbcConnection(cnstr);
    cn.Open();
    System.Diagnostics.Debug.WriteLine("connected.");
    
    try
    {
    OdbcTransaction trn = cn.BeginTransaction(IsolationLevel.ReadUncommitted);
    OdbcCommand cmd = new OdbcCommand("select * from T1", C1, C2);
    OdbcDataReader dr;
    dr = cmd.ExecuteReader();
    while (dr.Read())
    {
    System.Diagnostics.Debug.WriteLine(dr[1].ToString());
    }
    dr.Close();
    trn.Commit();
    }
    catch (OdbcException odbcex)
    {
    System.Diagnostics.Debug.WriteLine(odbcex.Message);
    System.Diagnostics.Debug.WriteLine(odbcex.StackTrace);
    }
    cn.Close();
    cn = null;
    
  4. Execute o aplicativo e certifique-se de que você chamou o método.
Depois de concluir essas etapas, você irá notar que nenhuma exceção ocorre.

Propriedades

ID do artigo: 917752 - Última revisão: segunda-feira, 3 de dezembro de 2007 - Revisão: 3.3
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 2.0
Palavras-chave: 
kbmt kbprb kbtshoot kbexpertiseadvanced KB917752 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: 917752

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