obtenu ORA-01843 lorsque je tente d'insérer la date et l'heure à Oracle
Question
J'ai un ANB B au format chaîne
A = 14/01/2007
B = 22:10:39
J'essaie d'insérer la date et l'heure:
SQL = "insert into MyTbl(Tdate,Ttime) value ('" + Convert.ToDateTime(A) + "','" + Convert.ToDateTime(B) + "')";
i eu erreur ORA-01843, ce que je peux faire?
Merci à l'avance de
La solution
L'erreur est due au mois, essayez:
TO_DATE (A, 'JJ / MM / AAAA')
Autres conseils
Ne pas utiliser SQL pour insérer des valeurs brutes. Utilisez une requête paramétrés à la place. Parse vos chaînes dans DateTime
.NET (ou DateTimeOffset
) et les valeurs de TimeSpan
de façon normale, puis utiliser quelque chose comme:
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();
}
(régler toute évidence pour les types de vos champs réels.)
Rappelez-vous que Oracle ne dispose pas d'un champ de temps seulement.
Vous essayez d'insérer un champ de temps que dans un datetime. Je suppose que le CLR tourne B en 00/00/00 22:10:39, ce qui est une date d'oracle valide. Par exemple:
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 toute façon, Convert.ToDateTime (B) est sans doute pas revenir la bonne chose.
En outre, ceci:
"insert into MyTbl(Tdate,Ttime) value ("
devrait être ceci:
"insert into MyTbl(Tdate,Ttime) values ("
... mais je devine que c'est juste une faute de frappe ici.
Cependant j'ai essayé la méthode Jon, il me n'a pas fonctionné pour pour ce jour aussi du temps. Donc, je l'ai trouvé cette méthode pour datetime. Peut-être que quelqu'un aide dans le prochain futur.
OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now; //for date
cmd.Parameters.Add(oPrm);