Convertir campo de cadena en campo de fecha y hora en Azure Table Storage

Tengo un campo en una tabla de Azure que contiene fechas y horas en formato de cadena. Quiero reemplazar esto con un campo DateTime y convertir los valores en la columna de cadena. ¿Cuál es la mejor manera de abordar esto?

En un SQL, haría esto creando una nueva columna y ejecutando una declaración de actualización ...

preguntado el 08 de enero de 11 a las 15:01

3 Respuestas

No lo he probado yo mismo, pero estos son los pasos que deberían funcionar. Debe ser un script de C # / VB / etc.

  1. Cambie la definición de la clase para que contenga un miembro / new / de tipo datetime.
  2. Ejecute la consulta linq para cargar todas las filas de la tabla y ejecute un bucle for que llenará la nueva variable de fecha y hora basada en la variable de cadena anterior.
  3. Guarde los objetos en la mesa. // ahora el almacenamiento de su tabla contiene objetos con una definición nueva y antigua de esa variable
  4. Eliminar el campo antiguo de la definición de clase
  5. Vuelva a cargar los objetos de la mesa y guárdelos sin hacer nada más que marcarlos como sucios. Esto / debería / eliminar el miembro antiguo de las estructuras serializadas dentro de la tabla. Ahora, si desea que el nuevo campo de fecha y hora tome el nombre de la variable de cadena original, vuelva a realizar los pasos del 1 al 5, esta vez moviendo los datos de un campo a otro. La única diferencia es que no es necesario que vuelva a realizar la conversión.

En general, este es un PITA completo y una de las pesadillas de las bases de datos de objetos y los servicios de almacenamiento.

Respondido el 08 de enero de 11 a las 23:01

Gracias por la respuesta, esperaba que fuera PITA :( - Sean Kearon

El cliente de almacenamiento de tabla de Azure comprende de forma nativa DateTime (pero no DateTimeOffset), por lo que es posible que desee considerar simplemente dejar que el SDK se encargue del asunto por usted.

De lo contrario, la mejor manera de representar DateTimes como cadenas es almacenarlos y recuperarlos explícitamente como valores UTC escritos y analizados utilizando el formato "u", p. Ej.

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

Respondido el 08 de enero de 11 a las 18:01

Mark: lo siento si no estaba claro, pero tengo los valores almacenados en la tabla como cadenas y quiero mantenerlos en un nuevo atributo DateTime. En SQL, crearía una nueva columna y ejecutaría una declaración de actualización ... - Sean Kearon

No tengo idea de si funcionará, pero podrías probar con "dichosa ignorancia":

En realidad, a la tienda Real Table no le importa la forma de sus entidades (la estructura Dev puede ser diferente). Cambie la propiedad de su entidad a DateTime, pero en la prueba Setter el valor es una fecha y hora, si no, analice el valor en un DT. Algo como

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

}

Con suerte, con el tiempo, o explícitamente en un lote, si simplemente carga las entidades y las guarda nuevamente, las configurará todas en DateTime.

Respondido el 09 de enero de 11 a las 02:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.