2010-11-18 14 views
-2

Il me semble avoir la chance de courir dans la funniest problems while deploying my software.exception vide pendant GetValues ​​de OdbcDataReader

Configuration:

  • Windows 2000 Prof.
  • .NET 2.0 application
  • Connexion à MySQL 5.0 via OdbcConnection en utilisant MySQL ODBC-Connector 3.51.26

Je déployait ma demande alors que je courais dans cette exception:

at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) 
at System.Data.Odbc.OdbcDataReader.GetData(Int32 i, SQL_C sqlctype, Int32 cb, Int32& cbActualOut) 
at System.Data.Odbc.OdbcDataReader.internalGetString(Int32 i) 
at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i, TypeMap typemap) 
at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i) 
at System.Data.Odbc.OdbcDataReader.GetValues(Object[] values) 
at MyAppl.UninterestingStackTace.StartsHere() 

Oui, c'est seulement le stacktrace ... parce qu'il n'y a pas de Message d'Exception, il n'y a pas non plus d'InnerException (j'enregistre aussi ceux depuis ma dernière rencontre), c'est tout ce que j'ai.

Le code ressemble à ceci:

// DtRdr is a passed in ODBCDataReader 
if (DtRdr != null && !DtRdr.IsClosed) 
{ 
    Object[] buffer = new Object[DtRdr.FieldCount]; 

    while (DtRdr.Read()) 
    { 
     DtRdr.GetValues(buffer); // Here happens the exception 

     // Modify buffer and use it 
    } 
} 

Il est seulement qui se passe sur cette machine, les données extraites/base de données est bonne (vérifié via une autre machine sur le même réseau et je l'ai aussi testé sur mon dev localement -machine) et bien sûr, il n'est pas reproductible sur une autre machine.

Tout en regardant dans réflecteur, je me rends compte que cela semble être un problème avec la lecture des données de la connexion. Toutes les autres opérations fonctionnent bien, je peux accéder aux données directement, seulement GetValues échoue.

j'ai écrit une application de test simple et rapide qui donne la même erreur, mais délivre également la déclaration suivante après avoir terminé:

Error in my_thread_global_end(): 1 threads didn't exit 

Je ne sais pas si cela est lié ou non, désolé pour la confusion.

Je suis perdu encore une fois ... Quelqu'un at-il déjà vu quelque chose comme ça?

Edit: Voici mon application de test:

using System; 
using System.Data; 
using System.Data.Odbc; 

namespace ODBCTest 
{ 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      try { 
       Console.WriteLine ("Creating connection..."); 
       using (OdbcConnection conn = new OdbcConnection ("ConnStringHere")) { 
        conn.Open(); 
        Console.WriteLine ("Creating command..."); 
        using (OdbcCommand cmd = conn.CreateCommand()) { 
         cmd.CommandText = "SimpleSelectHere;"; 

         Console.WriteLine ("Creating reader..."); 
         using (OdbcDataReader rdr = cmd.ExecuteReader()) { 
          if (rdr != null && !rdr.IsClosed) { 
           while (rdr.Read()) { 
            object[] temp = new object[rdr.FieldCount]; 
            rdr.GetValues (temp); 
           } 

           Console.WriteLine ("Seems to work fine."); 
          } else { 
           Console.WriteLine ("Could not create reader!"); 
          } 
         } 
        } 
       } 
      } catch (Exception ex) { 
       Console.WriteLine (ex.Message); 
       Console.WriteLine (ex.StackTrace); 
       Console.WriteLine(); 
       if (ex.InnerException != null) 
       { 
        Console.WriteLine (ex.InnerException.Message); 
        Console.WriteLine (ex.InnerException.StackTrace); 
       } else { 
        Console.WriteLine("No InnerException."); 
       } 
      } 

      Console.ReadKey(); 
     } 
    } 
} 

Et sa sortie:

Creating connection... 
Creating command... 
Creating reader... 

    at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode) 
    at System.Data.Odbc.OdbcDataReader.GetData(Int32 i, SQL_C sqlctype, Int32 cb, Int32& cbActualOut) 
    at System.Data.Odbc.OdbcDataReader.internalGetString(Int32 i) 
    at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i, TypeMap typemap) 
    at System.Data.Odbc.OdbcDataReader.GetValue(Int32 i) 
    at System.Data.Odbc.OdbcDataReader.GetValues(Object[] values) 
    at ODBCTest.MainClass.Main(String[] args) 

No InnerException. 
<At this point I hit a key> 
Error in my_thread_global_end(): 1 threads didn't exit 

Répondre

0

J'ai aussi observé ce problème dans MDAC 2.6 SP2 tout en travaillant avec Sybase DB, installer la version 2.8 SP1 a aidé dans mon cas.