Exception de dépassement de capacité lors de la lecture des valeurs décimales à partir de SQL Server

Je me demande si c'est un bug ou si je vais quelque chose de mal.

Je suis valeurs de chargement avec un SqlDataReader à partir d'une base de données SQL Server 2008, mais dans certaines circonstances, il ne parvient pas à convertir le SQL des valeurs dans .des valeurs nettes. (.NET 4.0)

J'ai fait remonter un test qui montre le véritable problème:

De travail exemple:

"select convert(decimal(38, 19), 260000 ) as test"
rs.GetValue(1);
--> returns 260000 (decimal)

Pas de travail exemple:

"select convert(decimal(36, 26), 260000 ) as test"

rs.GetValue(1);
--> throws
   System.OverflowException: Conversion overflows.
   at System.Data.SqlClient.SqlBuffer.get_Decimal()
   at System.Data.SqlClient.SqlBuffer.get_Value()
   at System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
   at System.Data.SqlClient.SqlDataReader.GetValues(Object[] values)

J'ai examiné les valeurs réelles que le Serveur SQL retured. Ils diffèrent que le non-travail on utilise 4 entiers pour exprimer la valeur, le travail d'un seul 3.

J'ai aussi vérifier le code source .net Réflecteur qui a dévoilé qu'une exception est levée si la valeur existe, de plus de 3 valeurs, mais je ne comprends pas la mécanique derrière eux.

Donc, je me demande si c'est un véritable bug dans le .net framework.

Précision pour les valeurs décimales est seulement jusqu'à 28 .S'il vous plaît aller à travers le lien stackoverflow.com/questions/745270/c-sharp-sizeof-decimal
Mais l'exemple même utilise une plus grande précision.

OriginalL'auteur Chuck | 2012-07-04