Frage

Ich habe ein anb B in String-Format

A = 14.01.2007

B = 22.10.39

Ich versuche, Datum und Uhrzeit einfügen:

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

Ich habe ORA-01843 Fehler, was ich tun kann?

Dank der im Voraus

War es hilfreich?

Lösung

Der Fehler ist aufgrund des Monat, versuchen Sie:

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

Andere Tipps

Verwenden Sie keine rohen SQL-Werte einzufügen. Verwenden Sie stattdessen eine parametrisierte Abfrage. Analysieren Sie Ihre Zeichenfolgen in .NET DateTime (oder DateTimeOffset) und TimeSpan Werte in der normalen Art und Weise, und verwenden Sie dann so etwas wie:

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();
}

(Natürlich einstellen für die Arten von Ihren tatsächlichen Felder aus.)

Beachten Sie, dass Oracle keine Zeit geschützte Feld hat.

Sie versuchen, eine zeit nur Feld in ein Datetime einzufügen. Meine Vermutung ist, dass die CLR B in 00/00/00 22.10.39 dreht, die kein gültiges Oracle-Datum ist. Zum Beispiel:

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

So oder so, Convert.ToDateTime (B) ist wahrscheinlich nicht das Richtige zurück.

Auch dies:

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

sollte dies sein:

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

... aber ich vermute, das ist nur ein Tippfehler hier.

Allerdings habe ich versucht, Jon Methode, es funktioniert nicht für mich zum Datum auch Zeit. So fand ich diese Methode für Datetime. Vielleicht, dass jemand in der nächsten Zukunft hilft auch.

OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now;  //for date
cmd.Parameters.Add(oPrm);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top