получил ORA-01843, когда пытаюсь вставить дату и время в Oracle

StackOverflow https://stackoverflow.com/questions/1567104

Вопрос

У меня есть A и B в строковом формате.

А = 01.14.2007

Б = 22:10:39

Я пытаюсь вставить дату и время:

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

у меня возникла ошибка ORA-01843, что я могу сделать?

заранее спасибо

Это было полезно?

Решение

Ошибка связана с месяцем, попробуйте:

TO_DATE(A, 'ДД/ММ/ГГГГ')

Другие советы

Не используйте необработанный SQL для вставки значений.Вместо этого используйте параметризованный запрос.Разберите ваши строки в .NET DateTime (или DateTimeOffset) и TimeSpan значения обычным способом, а затем используйте что-то вроде:

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

(Очевидно, скорректируйте типы ваших фактических полей.)

Помните, что в Oracle нет поля, предназначенного только для времени.

Вы пытаетесь вставить поле только для времени в дату и время.Я предполагаю, что CLR превращает B в 00/00/00 22:10:39, что не является допустимой датой оракула.Например:

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

В любом случае Convert.ToDateTime(B), вероятно, возвращает не то, что нужно.

Также это:

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

должно быть это:

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

...но я думаю, это просто опечатка.

Однако я попробовал метод Джона, он не сработал для даты и времени.Итак, я нашел этот метод для даты и времени.Возможно, это поможет кому-то и в будущем.

OracleParameter oPrm;
oPrm = cmd.CreateParameter();
oPrm.ParameterName = ":myDate";
oPrm.OracleDbType = OracleDbType.Date;
oPrm.Value = DateTime.Now;  //for date
cmd.Parameters.Add(oPrm);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top