Frage

Ich habe einen Wert, der korrekt in einer Eigenschaft eines Objekts gespeichert ist, aber wenn ich die Änderungen in der Speicherdatenbank Azure speichern, wird der doppelte Wert in der Datenbank gespeichert, um den Punkt zu ignorieren (7,11000000003 als 711 gespeichert). Auch wird die Eigenschaft geändert zu 711,0.

Wie kann ich dieses Problem lösen?

Das Feld ist bereits festgelegt in der Klasse und die Datenbanktabelle zu verdoppeln.

War es hilfreich?

Lösung

Dieses Problem scheint der Dev Speicher verwendet die Kultureinstellungen zurückzuführen ist. Wenn Sie einen Blick auf TableRow Tabelle innerhalb des Dev Speicher db nehmen, werden die Daten als XML gespeichert und Dezimalwerte verwenden den Punkt als Dezimaltrennzeichen. Hier in Brasilien ist der Punkt der Tausendertrennzeichen. Ich bearbeiten die Daten direkt in dem Dev Speicher db, den Punkt zu einem Komma (PT-BR Dezimaltrennzeichens) zu ändern, und der Wert wurde ok lesen. Das ist seltsam, denn wenn der gelesene Wert in Ordnung ist, wenn wir den PT-BR Dezimalzeichen, so scheint es Dev Lagerung ist meine aktuelle Kultur-Einstellung. Aber warum wird die Kultur auf das Speichern der Daten nicht angewendet?

PS: Ändern der Windows-Gebietsschema EN-US löste das Problem. Ich glaube, deshalb ist dies die einzige poste ich darüber finden konnte.

Andere Tipps

Ist Sie double-Wert in seinem eigenen Bereich, oder ist es in dem PartitionKey oder RowKey Feld? PartitionKey und RowKey sind immer Strings.

Ich habe gerade einen einfachen Test erstellt, die schreibt und liest eine Zeile mit einem Doppelfeld, und die Werte werden nur gut erhalten. Ich veränderte die Probe SmsMessage Klasse von Bill Lodin SMS-Code über msdev.com Training (ich die int Verzögerung Feld nahm und änderte es mit einem Schwimmer, und benannte sie in MyDouble Klärungs):

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))
    {
    }
}

Ich schreibe dann an die SmsMessageTable:

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

Ich sehe dies in der Tabelle Speicher-Explorer, und mein Doppelzimmer, wie ich sie eingegeben (zum Beispiel 1,2345).

Ich habe dann mit einer einfachen Linq-Abfrage abrufen, für einen bestimmten Benutzername in dem Partitionsschlüssel:

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

Meine Doppel alle Werte erhalten bleiben und stark als verdoppelt eingegeben haben.

Wie die Überprüfung des Wertes? Lokale Entwicklungsspeicher verwendet SQL Express unter der Haube, so dass Sie SQL und stochern dort eröffnet werden könnten. Ich würde das vermeiden und stattdessen den Wert zurückgelesen die Client-Bibliothek .NET Speicherung verwenden. Ich vermute, dass der Wert kommt wieder richtig.

(Vielleicht in den lokalen SQL-backed Speichern, der Wert in wissenschaftlicher Notation gespeichert?)

Auch wenn ich die Mühe zu schätzen und wahrscheinlich habe ich den Fall nicht aussetzen gut genug, nichts davon wirklich meine Frage beantworten. Diese Antwort ist einfach nicht die Prämie zu Unrecht zuzuschreiben. Die Prämie sollte nicht mit> = 2 upvotes auf die beste Antwort zugeschrieben automatisch werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top