Pregunta

Tengo un ANB B en formato de cadena

A = 14/01/2007

B = 22:10:39

Trato de insertar la fecha y hora:

SQL = "insert into MyTbl(Tdate,Ttime) value ('" + Convert.ToDateTime(A) + "','" + Convert.ToDateTime(B) + "')";

tengo ORA-01843 error, lo que puedo hacer?

gracias de antemano en

¿Fue útil?

Solución

El error se debe al mes, trate de:

TO_DATE (A, 'DD / MM / YYYY')

Otros consejos

No utilice SQL para insertar valores en bruto. Utilice una consulta parametrizada en su lugar. Analizar sus cadenas en DateTime .NET (o DateTimeOffset) y los valores TimeSpan de la forma habitual, y luego usar algo como:

string sql = "insert into MyTbl(Tdate,Ttime) values (:date, :time)";
using (OracleCommand cmd = new OracleCommand(sql, connection))
{
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add("date", OracleType.DateTime).Value = date;
    cmd.Parameters.Add("time", OracleType.IntervalDayToSecond).Value = time;
    cmd.ExecuteNonQuery();
}

(Obviamente ajustarse a los tipos de los campos reales.)

Recuerde que Oracle no tiene un campo de tiempo solamente.

Usted está tratando de insertar un campo en tiempo únicamente en una fecha y hora. Mi conjetura es que el CLR se está convirtiendo en B 00/00/00 22:10:39, que no es una fecha válida oráculo. Por ejemplo:

SQL> select to_date('00/00/00', 'MM/DD/YY') from dual;
select to_date('00/00/00', 'MM/DD/YY') from dual
               *
ERROR at line 1:
ORA-01843: not a valid month

De cualquier manera, Convert.ToDateTime (B) probablemente no está regresando lo correcto.

Además, esto:

"insert into MyTbl(Tdate,Ttime) value ("

debería ser la siguiente:

"insert into MyTbl(Tdate,Ttime) values ("

... pero supongo que es sólo un error tipográfico aquí.

Sin embargo he intentado método de Jon, no funcionó para mí por fecha también tiempo. Así que me encontré con este método de fecha y hora. Tal vez eso ayuda a alguien en el próximo futuro.

OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now;  //for date
cmd.Parameters.Add(oPrm);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top