Question

J'ai une valeur qui est correctement stockée dans une propriété d'un objet, mais lorsque j'enregistre les modifications apportées à la base de données de stockage Azure, la double valeur est enregistrée à la base de données en ignorant le point (7,11000000003 est enregistré en tant que 711). En outre, la propriété est modifiée pour 711,0.

Comment puis-je résoudre ce problème?

Le champ est déjà défini doubler dans la classe et la table de base de données.

Était-ce utile?

La solution

Ce problème semble être dû aux paramètres de culture Dev Storage utilise. Si vous jetez un oeil à la table TableRow dans la db Dev stockage, les données sont stockées au format XML et les valeurs décimales utiliser le point comme séparateur décimal. Ici, au Brésil le point est le séparateur des milliers. J'édité les données directement dans le stockage Dev db, en changeant le point d'une virgule (séparateur décimal PT-BR), et la valeur a été lue ok. C'est étrange, parce que si la valeur est lue ok lorsque l'on utilise le séparateur décimal PT-BR, il semble Dev stockage utilise mon réglage actuel de la culture. Mais pourquoi la culture n'est pas appliquée sur la sauvegarde des données?

PS: Modification des fenêtres paramètres régionaux EN-US a résolu le problème. Je suppose que ce pourquoi il en est le seul poste que je pourrais trouver à ce sujet.

Autres conseils

Votre valeur double dans son propre domaine, ou est-ce dans le PartitionKey ou sur le terrain RowKey? PartitionKey et RowKey sont toujours des chaînes.

Je viens de créer un test simple qui écrit et lit une ligne avec un double champ, et les valeurs sont conservées très bien. J'ai modifié la classe échantillon SmsMessage à partir du code SMS Bill Lodin via msdev.com formation (je pris le int champ Délai et changé pour un flotteur, et le renomme en MyDouble des précisions):

public class SmsMessage: TableServiceEntity
{
    public double MyDouble { get; set; }
    public SmsMessage(string destination, string message, double myDouble)
    {
        PartitionKey = destination;
        RowKey = message;
        MyDouble = myDouble;
    }
    public SmsMessage()
        : base("", string.Format("{0:d10}", DateTime.Now.Ticks))
    {
    }
}

Je puis écrire à l'SmsMessageTable:

smsTable.AddObject("SmsMessages", new SmsMessage(destination, message, myDouble));
smsTable.SaveChanges();

Je vois cela dans l'explorateur de stockage de table, et mes doubles sont comme je les ai inscrits (par exemple 1,2345).

Je récupérer ensuite avec une simple requête LINQ, un nom d'utilisateur donné dans la clé de partition:

var results = from m in smsTable.SmsMessages
                      where m.PartitionKey.Equals(txtDestination.Text.Trim())
                      select m;

Mes doubles valeurs sont toutes conservées et fortement typé double.

Comment allez-vous vérifier la valeur? stockage de développement local utilise SQL Express sous le capot, de sorte que vous pourriez être l'ouverture de SQL et de fouiller là-bas. Je voudrais éviter cela et lire plutôt la valeur de retour à l'aide de la bibliothèque cliente de stockage .NET. Je soupçonne que la valeur reviendra correctement.

(peut-être dans le magasin SQL soutenu local, la valeur est stockée dans la notation scientifique?)

Bien que j'apprécie l'effort et probablement que je ne l'ai pas assez bien exposer le cas, rien de tout cela vraiment répondu à ma question. Cette réponse est tout simplement pas d'attribuer la prime injustement. La prime ne doit pas être attribuée automatiquement à la meilleure réponse avec> = 2 upvotes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top