2016-03-31 3 views
0

Я хочу добавить дату в базу данных. Но только дата без времени.Дата добавления в Oracle Тип базы данных Дата

Если у меня есть переменный тип DateTime он работает, но вставляет со временем 00:00:00.

Я пробовал это, но он держит, дает мне ошибку ввода.

INSERT INTO BNR(EUR,DATE_API) VALUES (4.2546 , to_date('2016/30/03','DD-MON-YY')); 

Это моя дата переменной

DateTime date_bnr = (from cube in doc.Descendants(d + "Cube") 
         from rate in cube.Elements(d + "Rate") 
         where 
          ((DateTime)cube.Attribute("date")).Date == yesterday 
           && 
          (string)rate.Attribute("currency") == "EUR" 
         select ((DateTime)cube.Attribute("date")).Date 
     ).FirstOrDefault(); 

var datebnr = date_bnr.ToShortDateString(); // what I tried 
var dt = date_bnr.ToString("DD-MON-YY");  // what I tried 

И это мой Вставить в базу данных

string insert_bnr = "INSERT INTO BNR(EUR,DATE_API) VALUES (:value,:datee) "; 
      OracleCommand cmd = new OracleCommand(insert_bnr, con); 

      OracleParameter bnr_value = new OracleParameter(); 
      bnr_value.OracleDbType = OracleDbType.Varchar2; 
      bnr_value.Value = bnr.ToString(); 

      OracleParameter bnr_date = new OracleParameter(); 
      bnr_date.OracleDbType = OracleDbType.Date; 
      bnr_date.Value = dt; 

      cmd.Parameters.Add(bnr_value); 
      cmd.Parameters.Add(bnr_date); 

      cmd.ExecuteNonQuery(); 
+1

Oracle дат всегда есть время, даже если это полночь. Вы показываете, что это другое дело. С 'to_date ('2016/30/03', 'DD-MON-YY')', почему вы используете маску формата, которая не соответствует строковому литералу, который у вас есть? Что производит 'ToShortDateString()'? И почему вы устанавливаете этот параметр как строку, а не дату? –

+1

«2016/30/03» не соответствует строке формата «DD-MON-YY», что такое «ошибка ввода»? вы получаете исключение, если да, то какое? – dlatikay

+0

Ошибка «Ошибка SQL: ORA-01861: литерал не соответствует строке формата», а ToShortDateString() дает мне только дату без даты –

ответ

1

Вы можете добавить check ограничения для подтверждения того, что вход не имеет компонента времени:

alter table bnr add constraint chk_date_api check (date_api = trunc(date_api)); 

Это позволит убедиться, что в столбце таблицы нет компонента времени. Но он возвращает ошибку, если update или insert устанавливает дату со значением. Следовательно, приложение должно вставлять правильные данные, чтобы избежать ошибки.

Другой альтернативой является использование триггера для удаления любого компонента времени. Лично я думаю, что это слишком много, если у вас есть ограничение check.

+0

OP, похоже, уже вставляется с временем, установленным в полночь, но хочет тип данных, у которого нет времени вообще (я думаю). Конечно, этого не существует. Это полезно для обеспечения того, чтобы другое время не устанавливалось случайно, но я не уверен, что это действительно то, что было задано. –

0

Формат to_date('2016/30/03','DD-MON-YY') не соответствует.

Он должен быть либо to_date('03/MARCH/16','DD-MON-YY') или (предпочтительно) to_date('2016/30/03','YYYY/DD/MM')

Смежные вопросы