Pergunta

Eu tenho um ANB B em formato de string

A = 14/01/2007

B = 22:10:39

Eu tento inserir data e hora:

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

Recebi o erro ORA-01843, o que posso fazer?

desde já, obrigado

Foi útil?

Solução

O erro é devido ao mês, tente:

To_date (a, 'dd/mm/aaaa')

Outras dicas

Não use SQL bruto para inserir valores. Use uma consulta parametrizada. Analise suas cordas no .net DateTime (ou DateTimeOffset) e TimeSpan valores da maneira normal e depois usam 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, ajuste os tipos de seus campos reais.)

Lembre-se de que o Oracle não tem um campo apenas de tempo.

Você está tentando inserir um campo apenas de tempo em um datetime. Meu palpite é que o CLR está transformando B em 00/00/00 22:10:39, que não é uma data válida do Oracle. Por exemplo:

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 qualquer forma, o convert.todateTime (b) provavelmente não está retornando a coisa certa.

Além disso, isso:

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

deve ser o seguinte:

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

... Mas acho que isso é apenas um erro de digitação aqui.

No entanto, tentei o método Jon, não funcionou para mim para a data também. Então, encontrei esse método para o DateTime. Talvez isso ajude alguém no próximo futuro também.

OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now;  //for date
cmd.Parameters.Add(oPrm);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top