Domanda

Ho un ANB B in formato stringa

A = 14/01/2007

B = 22:10:39

provo ad inserire la data e l'ora:

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

ho ottenuto ORA-01843 errore, cosa posso fare?

ringraziare di di anticipo

È stato utile?

Soluzione

L'errore è dovuto al mese, provare:

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

Altri suggerimenti

Non utilizzare SQL prime per inserire i valori. Utilizzare una query con parametri, invece. Analizzare le corde in DateTime .NET (o DateTimeOffset) e valori TimeSpan in modo normale, e quindi usare qualcosa come:

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

(Ovviamente regolare per i tipi dei vostri campi effettivi.)

Ricordate che Oracle non ha un campo di tempo solo.

Si sta cercando di inserire un campo di tempo solo in un datetime. La mia ipotesi è che il CLR si sta trasformando in B 00/00/00 22:10:39, che non è una data valida oracolo. Ad esempio:

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

In entrambi i casi, Convert.ToDateTime (B) probabilmente non sta tornando la cosa giusta.

Inoltre, in questo modo:

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

dovrebbe essere questo:

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

... ma credo che è solo un errore di battitura qui.

Comunque ho provato metodo di Jon, non ha funzionato per me per la data anche il tempo. Così ho trovato questo metodo per datetime. Forse questo aiuta qualcuno in prossimo futuro.

OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now;  //for date
cmd.Parameters.Add(oPrm);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top