2010-09-22 4 views
0

J'ai hérité d'un morceau de code au travail et je viens de remarquer une petite bizarrerie assez banale mais bizarre. Alors peut-être que quelqu'un peut me sauver la mise en place propre .NET 2.0 Environnement pour le tester.Est-ce que boolean.ToString() se comporte différemment entre .NET 2.0 et .NET 3.5

Il y a une table de SQL2K5 contenant une colonne appelée IsEnabled BIT NOT NULL

Il y a une sélection de sproc de cette table

Il y a un morceau de code C# qui, à l'aide d'un lecteur de SQL appelle que SPROC, boucles à travers la lignes de résultat, et écrit certaines de ces informations dans un fichier journal ainsi que d'autres choses. Donc, l'un des

using (SqlDataReader reader = DAL.SqlHelper.ExecuteReader(connStr, "usp_MySproc")) 
{ 
    while (reader.Read()) 
    { 
     //code to do stuff... 

     string s = reader["IsEnabled "].ToString(); //exactly like this... 

     //code to concatenate `s` with other values 
     //log it all to file 
    } 
} 

La chose étrange est, dans certains fichiers journaux plus anciens, cette valeur est écrit comme il est écrit 1 ou un 0 alors que dans les nouveaux fichiers journaux comme un true ou un false

la les choses suivantes sont arrivées. Elle a été causée par:

  1. Quelqu'un change le code
  2. Quelqu'un de changer le type de données dans le tableau de int -> bit
  3. Quelqu'un de changer le type de données dans le sproc de int -> peu (peut-être il y avait un cAST/convertir là-bas qui a obtenu enlevé)
  4. une installation de .NET 3.5 sur l'ensemble de nos serveurs de production, il y a quelques mois, et les dates ne semblent coïncider avec le changement dans les fichiers journaux,

J'ai chaluté goo Gle pour cette dernière heure ou si cherchant des changements entre .net 2.0 & .net 3.5 mais rien ne me sautant dessus.

Quelqu'un peut-il nous éclairer à ce sujet?

+0

Que montre le journal de votre système de contrôle de version? Le code a-t-il été modifié? Selon la documentation, la sortie doit être TrueString ou FalseString (c'est-à-dire "True" ou "False" avec des majuscules) dans toutes les versions et il est peu probable que cela ait été changé. –

+0

c'est la chose ... pas de changements dans SVN, pas de bizarreries dans les versions, les DLL modifiées, et je fais confiance à mon équipe. Le DBA n'a aucune trace de modification de la table ou du sproc non plus (ce qui ne veut pas dire qu'il ne l'a pas fait). Ce n'est pas un gros problème, ça n'a rien cassé ... c'est juste étrange. –

Répondre

0

Vous pouvez reconstruire votre code pour .NET 2.0 et lancer un test pour voir si la base de code que vous avez maintenant affiche 1/0 ou true/false. Cela devrait vous fournir votre réponse. En outre, ce n'est pas vraiment boolean.ToString() que vous appelez dans ce cas. C'est le lecteur de données, en utilisant la collection et le casting par défaut. Il se peut que le lecteur de données ait changé la façon dont il affiche les champs de bits quand une chaîne est appelée.

+0

l'a essayé ... recompilé pour cibler le framework 2.0. même comportement de sortie vrai/faux –

+1

Votre hypothèse n'est pas tout à fait vraie. ['SqlDataReader.Item'] (http://msdn.microsoft.com/fr-fr/library/f01t4cfy.aspx) renvoie' object', donc le code appelle la méthode virtuelle 'object.ToString()' sur le retour élément et non pas la méthode 'ToString' des lecteurs de données. –

Questions connexes