DetailPage-MSS-KB

Base de Dados de Conhecimento

Artigo: 917752 - Última revisão: segunda-feira, 3 de Dezembro de 2007 - Revisão: 3.3

 

Nesta página

Sintomas

Considere o seguinte cenário. Utilizar o fornecedor de dados do Microsoft .NET Framework para ODBC no .NET Framework 2.0 para ligar a uma origem de dados da aplicação. Em seguida, utilizar o método BeginTransaction do objecto OdbcConnection para iniciar uma transacção. Especificar um nível de isolamento de transacção que não é suportado pela origem de dados para a transacção. Neste cenário, a excepção OdbcException não ocorre conforme esperado. No entanto, a excepção ocorre conforme esperado quando utiliza o .NET Framework 1.1.

Causa

Este problema ocorre porque o método BeginTransaction não regista o erro ODBC (SQL_ERROR) que SQLSetConnectAttr funciona devolve. Modo autocommit é o modo de gestão de transacções predefinido para o fornecedor de dados .NET Framework para ODBC. O fornecedor de dados desactiva apenas Autocommit modo quando o nível de isolamento de transacção está definido correctamente. Por conseguinte, se especificar um nível de isolamento de transacções incorrecto, a transacção não funciona. Se chamar o método de consolidação ou o método de anulação , são inválidos. O método de consolidação e o método de anulação não relatar o erro ODBC (SQL_ERROR).

Resolução

Uma correcção suportada está agora disponível da Microsoft. Contudo, destina-se 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 o próximo NET Framework 2.0 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 dos números de telefone de 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 (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.

Pré-requisitos

Para aplicar esta correcção, tem de ter o Microsoft suporta ficheiros que são descritos no seguinte artigo da base de dados de conhecimento da Microsoft instalado no computador:
916002  (http://support.microsoft.com/kb/916002/ ) CORRECÇÃO: Mensagem de erro quando tenta utilizar a classe SqlClient numa aplicação baseada no ADO.NET 2.0 para ligar a uma instância do SQL Server 2005: "novo pedido não é permitido iniciar porque deve vir com descritor de transacção válida"

Requisito de reinício

Não é necessário reiniciar o computador depois de aplicar esta correcção.

Informações de registo

Não é necessário alterar o registo.

Informações sobre ficheiros da correcção

Esta correcção contém apenas os ficheiros necessários para corrigir os problemas referidos neste artigo. Esta correcção poderá não conter todos os ficheiros que necessita para actualizar completamente um produto para a compilação mais recente.A versão inglesa desta correcção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas na hora universal coordenada (UTC). 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 no item Data e hora no painel de controlo.

Versão de 32 bits do .NET framework 2.0

Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
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

Versão 2.0 x 64 do .NET framework

Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
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 200615: 06x 64
System.data.dll2.0.50727.1582,959,87224 De Maio de 200611: 25x 64

Versão da arquitectura Itanium do .NET framework 2.0

Reduzir esta tabelaExpandir esta tabela
Nome de ficheiroVersão do ficheiroTamanho do ficheiroDataTempoPlataforma
Mscordacwks.dll2.0.50727.1582,710,01624 De Maio de 200614: 06IA-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 utiliza o nível de isolamento correcta. É possível adicionar código para a aplicação para verificar se o nível de transacção está correcto e para accionar uma excepção no código.

Ponto Da Situação

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

Mais Informação

Para obter mais informações sobre o esquema de atribuição de nomes para actualizações do Microsoft SQL Server, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
822499  (http://support.microsoft.com/kb/822499/ ) Novo esquema de atribuição de nomes de ficheiros para pacotes de actualização de software do Microsoft SQL Server

Para obter mais informações sobre a terminologia de actualização de software, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
824684  (http://support.microsoft.com/kb/824684/ ) Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Mais Informação

Este problema poderá provocar danos nos dados dado que não é possível utilizar o método de anulação . Por exemplo, pode especificar um nível de transacção incorrecto. Esperar uma reversão ocorra se ocorrer danos nos dados. No entanto, a anulação não ocorre. Uma vez que o método de consolidação não regista o erro, poderão ocorrer danos dados uma vez que os dados podem não ter sido consolidados conforme esperado.

Passos para reproduzir o problema

  1. Crie um ficheiro de dados do Microsoft Access (.mdb) e, em seguida, criar uma tabela que contém duas colunas. Suponha que o ficheiro de dados é guardado na pasta d:\db1.mdb e que o nome da tabela é T1. Suponha que as duas colunas são denominadas C1 e C2.
  2. Inserir alguns registos na tabela T1.
  3. Crie um projecto de C# utilizando o Microsoft Visual Studio 2005 e, em seguida, cole o código seguinte para 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 a aplicação e certifique-se de que chamou o método.
Depois de concluir estes passos, notará que não excepção ocorre.

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áticaTraduçã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: 917752  (http://support.microsoft.com/kb/917752/en-us/ )
Partilhar
Opções de suporte adicionais
Fóruns de Suporte da Comunidade Microsoft
Contacte-nos directamente
Encontre um parceiro certificado Microsoft
Loja Microsoft