Domanda

Ho un valore che viene correttamente memorizzato in una proprietà di un oggetto, ma quando salvo le modifiche al database di archiviazione Azure, il valore doppio viene memorizzato nel database ignorando il punto (7,11000000003 viene salvato come 711). Inoltre, la proprietà viene modificato in 711,0.

Come faccio a risolvere questo problema?

Il campo è già destinato a raddoppiare in classe e la tabella del database.

È stato utile?

Soluzione

Questo problema sembra essere dovuto alle impostazioni cultura del Dev bagagli sta usando. Se si dà un'occhiata a tavola TableRow all'interno del db Dev bagagli, i dati vengono memorizzati in formato XML, e valori decimali utilizzare il punto come separatore decimale. Qui in Brasile il punto è il separatore delle migliaia. Ho modificato i dati direttamente nel db Dev bagagli, cambiando il punto a una virgola (separatore decimale PT-BR), e il valore è stato letto ok. È strano, perché se il valore è ok lettura quando usiamo il separatore PT-BR decimale, sembra Dev bagagli sta usando la mia impostazione cultura corrente. Ma perché la cultura non viene applicata sul salvataggio dei dati?

PS: Modificare le finestre Locale per EN-US ha risolto il problema. Direi che è il motivo per cui questo è l'unico post che ho potuto trovare su di esso.

Altri suggerimenti

è il vostro valore doppio nel proprio settore, o è nel PartitionKey o nel campo rowkey? PartitionKey e RowKey sono sempre stringhe.

Ho appena creato un test semplice, che scrive e legge una riga con un doppio campo, ed i valori sono conservati bene. Ho modificato la classe smsmessage campione dal codice SMS di Bill Lodin via msdev.com formazione (ho preso il campo Ritardo int e cambiato in un galleggiante, e ribattezzata per MyDouble per chiarimenti):

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

Ho poi scrivere al SmsMessageTable:

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

ho vista questo l'esploratore di stoccaggio tavolo, e le mie doppie sono come li ho inserito (ad esempio 1.2345).

Ho poi recuperare con una query LINQ semplice, per un dato nome utente nella chiave di partizione:

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

I miei valori doppi sono tutti conservata e fortemente tipizzato come doppie.

Come stai controllando il valore? Lo sviluppo locale di stoccaggio utilizza SQL Express sotto il cofano, per cui si potrebbe essere aprendo SQL e rovistando lì. Vorrei evitare che invece di leggere di nuovo il valore utilizzando la libreria client di stoccaggio .NET. Ho il sospetto che il valore tornerà correttamente.

(Forse in negozio SQL-backed locale, il valore viene memorizzato nella notazione scientifica?)

Anche se apprezzo lo sforzo e, probabilmente, non mi espongo il caso abbastanza bene, niente di tutto questo davvero rispondere alla mia domanda. Questa risposta non è solo per l'attributo di taglie ingiustamente. La generosità non dovrebbe essere attribuito automaticamente la risposta migliore con> = 2 upvotes.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top