consiguió ORA-01843 cuando intento insertar la fecha y hora a Oracle
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
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);