Domanda

Ho un campo in una tabella che contiene Azure volte data in formato stringa. Voglio sostituire questo con un campo DateTime e convertire i valori della colonna stringa. Qual è il modo migliore per affrontare questo?

In uno SQL mi piacerebbe fare questo con la creazione di una nuova colonna e esegue un'istruzione UPDATE ...

È stato utile?

Soluzione

Non ho provato io stesso, ma qui sono i passi che / dovrebbe / lavoro. Questo deve essere un C # / VB / etc script.

  1. Cambia la definizione della classe per contenere un / new / membro di tipo datetime.
  2. Esegui la query LINQ per caricare tutte le righe della tabella, ed eseguire un ciclo for, che popolerà nuova variabile datetime basato sulla vecchia variabile stringa.
  3. Salvare gli oggetti a tavola. // ora lo storage tabella contiene oggetti con nuova e vecchia definizione di quella variabile
  4. Rimuovere il vecchio campo da definizione di classe
  5. Carica gli oggetti dalla tabella di nuovo e salvarli w / o di fare qualsiasi cosa, ma la marcatura di loro sporco. Questo / dovrebbe / sbarazzarsi dei vecchi Stati dalle strutture serializzato all'interno della tabella. Ora, se si desidera che il nuovo campo datetime a prendere il nome della variabile stringa originale fare passaggi 1-5, questa volta spostare i dati da un campo in un altro. L'unica differenza è che non c'è bisogno di fare di nuovo la conversione.

In generale, questo è una valle di lacrime completo e uno dei Banes di database degli oggetti e dei servizi di stoccaggio.

Altri suggerimenti

L'Azure Storage Table client capisce nativamente DateTime (ma non DateTimeOffset), in modo che si può prendere in considerazione semplicemente lasciando l'SDK prendersi cura della questione per voi.

In caso contrario, il modo migliore per rappresentare DateTimes come stringhe è quello di memorizzare in modo esplicito e recuperarli come valori UTC scritti e analizzati utilizzando il formato "u", per es.

var dateAsString = myDateTime.ToString("u");

Non ho idea se funzionerà, ma si potrebbe provare "beata ignoranza":

Patrimonio tabella negozio in realtà non preoccupa la forma dei vostri entità (tessuto Dev può essere diversa). Modificare la vostra proprietà entità DateTime, ma nel test Setter il valore è un Datetime, se non analizzare il valore in un DT. Qualcosa di simile

private DateTime myDT
public DateTime MyDT
{
    get
    {
        return myDT;
    }
    set
    {
       DateTime = null;
       if(value is DateTime)
       {
           myDT = value;
       }
       else
       {
           myDT = DateTime.Parse(value);
       }
    }

}

Speriamo che nel corso del tempo, o esplicitamente in un batch, se è sufficiente caricare le entità e salvare di nuovo che sarà loro tutto pronto per DateTime.

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