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

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top