Estoy tratando de insertar .NETO valor de DateTime en un Oráculo de la FECHA de la columna utilizando ODP.NET. Hasta ahora, he intentado usar el OracleDate() constructor para lanzar la .NET DateTime así:

new OracleDate(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTimeNow.Hour, DateTime.Now.Minute, DateTime.Now.Second)

Cuando yo intente esto, se inserta el correcto año, mes y día en la columna, pero el tiempo siempre se establece a la medianoche. ¿Cómo puedo insertar la hora correcta, junto con la fecha?

Sin parámetros, el SQL se parece a esto (DateTime.Ahora se utiliza para la claridad, de lo contrario me acababa de uso SYSDATE):

"update mytable set timestamp = '" + new OracleTimeStamp(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTimeNow.Second) + "'"
InformationsquelleAutor kittyhawk | 2011-09-01

2 Comentarios

  1. 4

    Según este debe utilizar OracleTimeStamp como OracleDbType para lograr lo que quieres…

    OracleDate es sin la porción de tiempo… este comportamiento comenzó hace algún tiempo (IIRC Oracle 8 o así) con los controladores JDBC… con los controladores JDBC no era/es un extraño solución que no recuerdo ahora mismo… no sé si hay una solución para ODP.NET… OracleTimeStamp es el soportado oficialmente manera para las fechas con tiempo porciones…

    EDITAR – después de la OP agregada instrucción SQL:

    Primero de todo esta declaración contiene dos problemas – nunca el nombre de una columna o de la tabla como una palabra reservada (es decir,timestamp) … el otro problema es la falta de uso de un parámetro que en este caso no va a llevar a la inyección de SQL, pero todavía es una mala práctica y conduce (si esta misma instrucción se utiliza varias veces) a un mínimo la pérdida de rendimiento…

    SI usted todavía desea usar de esa manera, ENTONCES esto va a funcionar:

    "update mytable set timestamp = TO_DATE ('" + DateTime.Now.ToString ("yyyyMMddHHmmss") + "', 'YYYYMMDDHH24MISS')";
    • El uso de la OracleTimeStamp tipo me da el error de Oracle: «fecha de formato de imagen termina antes de la conversión de toda la cadena de entrada.»
    • por favor, mostrar la exacta instrucción SQL – tal vez necesita un mínimo de modificación de
    • por favor, ver mi EDICIÓN anterior…
  2. 4

    Usted debe utilizar los parámetros de este. Además no hay necesidad de utilizar Oracle específicos de tipos de datos cuando un equivalente .NET tipo de datos va a hacer. Esto tiene la advatage de lo que es fácil de cambiar ODP.NET para un controlador diferente en una fecha posterior, como la mayoría de los otros controladores de trabajo con los nativos .NETO de los tipos de datos.

    using (OracleConnection conn = new OracleConnection("your connection string here")
    {
        string query = "update mytable set timestamp = :foo";
    
        using (OracleCommand cmd = new OracleCommand(query, conn))
        {
            cmd.Parameters.Add(":foo", DateTime.Now);
    
            cmd.ExecuteNonQuery();
        }
    }
    • Estoy de acuerdo. No hay ninguna razón para utilizar la marca de hora.
    • Estoy teniendo un problema similar. Debo estar entrando en una datetime? Ahora puedo entrar en una cadena de formqted con un tiempo de sobre el final.
    • Sí, todos los de la ADO.NET los controladores & bases de datos que he utilizado sería trabajar con el código anterior, suponiendo que el «mytable.marca de hora» en la columna anterior tiene el correspondiente tipo de datos (por ejemplo, la FECHA en Oracle o marca de hora en Postgres).

Dejar respuesta

Please enter your comment!
Please enter your name here