REVISIÓN: El objeto OdbcConnection no notifica un error cuando se especifica un nivel de aislamiento de transacción que no es compatible con el origen de datos en .NET Framework 2.0

Seleccione idioma Seleccione idioma
Id. de artículo: 917752 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Tenga en cuenta la situación siguiente. Utilice el proveedor de datos de Microsoft .NET Framework para ODBC en .NET Framework 2.0 para conectarse a un origen de datos de la aplicación. Después de utilizar el método BeginTransaction del objeto OdbcConnection para iniciar una transacción. Especificar un nivel de aislamiento de transacción que no es compatible con el origen de datos para la transacción. En este escenario, la excepción OdbcException no se produce como se esperaba. Sin embargo, la excepción se produce como se esperaba cuando utiliza .NET Framework 1.1.

Causa

Este problema se produce porque el método BeginTransaction no notifica el error de ODBC (SQL_ERROR) que el SQLSetConnectAttr función devuelve. Modo de confirmación automática es el modo de administración de transacción predeterminado para el proveedor de datos de .NET Framework para ODBC. El proveedor de datos desactiva el modo de confirmación automática sólo cuando el nivel de aislamiento de transacción está establecido correctamente. Por lo tanto, si especifica un nivel de aislamiento de transacción incorrecta, la transacción no funciona. Si se llama al método Commit o el método Rollback , no son válidos. El método Commit y el método Rollback no informan el error de ODBC (SQL_ERROR).

Solución

Hay una revisión compatible de Microsoft. Sin embargo, se diseñó para corregir el problema descrito en este artículo. Aplíquela sólo a sistemas que experimenten este problema específico. Este hotfix puede ser sometido a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere al próximo Service Pack de NET Framework 2.0 que contenga este hotfix.

Para resolver este problema inmediatamente, póngase en contacto con servicios de soporte de cliente de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de los servicios de soporte técnico de Microsoft e información acerca de los costos de soporte, visite el siguiente sitio Web:
http://support.microsoft.com/contactus/?ws=support
Nota en casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.

Requisitos previos

Para aplicar este hotfix, debe tener Microsoft admite archivos que se describen en el siguiente artículo de Knowledge Base en el equipo:
916002REVISIÓN: Un mensaje de error cuando intenta utilizar la clase SqlClient en una aplicación basada en ADO.NET 2.0 para conectarse a una instancia de SQL Server 2005: "nueva solicitud no se permite iniciar porque debe proceder con el descriptor de transacción válido"

Requisito de reinicio

No es necesario reiniciar el equipo después de aplicar este hotfix.

Información del registro

No es necesario cambiar el registro.

Información de archivos de hotfix

Este hotfix contiene sólo los archivos necesarios para corregir los problemas recogidos en este artículo. Esta revisión no puede contener todos los archivos que debe tener para actualizar plenamente un producto a la compilación más reciente.La versión en inglés de este hotfix tiene los atributos de archivo (o atributos de último archivo) mostrados en la siguiente tabla. Las fechas y las horas de estos archivos se muestran en hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria el elemento fecha y hora en el panel de control.

Versión de 32 bits de .NET framework 2.0

Contraer esta tablaAmpliar esta tabla
Nombre de archivoArchivo VersiónTamaño del archivoFechaTiempoPlataforma
Mscordacwks.dll2.0.50727.158800,76824 De mayo de 200614: 59x 86
Mscorlib.dll2.0.50727.1584,317,18424 De mayo de 200614: 59x 86
Mscorwks.dll2.0.50727.1585,623,29624 De mayo de 200614: 59x 86
SOS.dll2.0.50727.158377,34424 De mayo de 200614: 59x 86
System.Data.dll2.0.50727.1582,893,82424 De mayo de 200614: 59x 86

.NET framework 2.0 x-versión de 64

Contraer esta tablaAmpliar esta tabla
Nombre de archivoArchivo VersiónTamaño del archivoFechaTiempoPlataforma
Mscordacwks.dll2.0.50727.1581,597,44024 De mayo de 200609: 06x 64
Mscorlib.dll2.0.50727.1583,956,73624 De mayo de 200611: 25x 64
Mscorwks.dll2.0.50727.15810,306,04824 De mayo de 200605: 06x 64
SOS.dll2.0.50727.158476,16024 De mayo de 200606: 15x 64
System.Data.dll2.0.50727.1582,959,87224 De mayo de 200611: 25x 64

Versión de arquitectura Itanium de .NET framework 2.0

Contraer esta tablaAmpliar esta tabla
Nombre de archivoArchivo VersiónTamaño del archivoFechaTiempoPlataforma
Mscordacwks.dll2.0.50727.1582,710,01624 De mayo de 200614: 06IA-64
Mscorlib.dll2.0.50727.1583,956,73624 De mayo de 200612: 03IA-64
Mscorwks.dll2.0.50727.15821,260,28824 De mayo de 200606: 11IA-64
SOS.dll2.0.50727.158857,08824 De mayo de 200606: 22IA-64
System.Data.dll2.0.50727.1583,102,20824 De mayo de 200612: 03IA-64

Solución

Para evitar este problema, asegúrese de que utilice el nivel de aislamiento transacción correcta. Puede agregar código a la aplicación para comprobar si el nivel de transacción es correcto y una excepción en el código.

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".

Más información

Para obtener más información sobre el esquema de nomenclatura para actualizaciones de Microsoft SQL Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
822499Nuevo esquema de nomenclatura para los paquetes de actualización del software de Microsoft SQL Server

Para obtener más información acerca de la terminología relativa de la actualización de software, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft

Más información

Este problema puede causar daños en los datos porque no puede utilizar el método Rollback . Por ejemplo, puede especificar un nivel de transacción incorrecta. Se espera una reversión a producirse si se producen daños en los datos. Sin embargo, no se produce la operación de deshacer. Como el método Commit no informa del error, pueden producirse daños en los datos porque los datos que no han confirmado como se esperaba.

Pasos para reproducir el problema

  1. Crear un archivo de datos de Microsoft Access (.mdb) y, a continuación, crear una tabla que contiene dos columnas. Suponga que el archivo de datos se guarda en la carpeta d:\db1.mdb y que el nombre de tabla es T1. Suponga que las dos columnas se denominan C1 y C2.
  2. Insertar algunos registros en la tabla T1.
  3. Cree un proyecto de C# con Microsoft Visual Studio 2005 y, a continuación, pegue el código siguiente en un 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. Ejecute la aplicación y asegúrese de llamar al método.
Después de completar estos pasos, observará que se produce ninguna excepción.

Propiedades

Id. de artículo: 917752 - Última revisión: lunes, 03 de diciembre de 2007 - Versión: 3.3
La información de este artículo se refiere a:
  • Microsoft .NET Framework 2.0
Palabras clave: 
kbmt kbprb kbtshoot kbexpertiseadvanced KB917752 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 917752

Enviar comentarios

 

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