2016-03-31 20 views
0

Ich möchte ein Datum zur Datenbank hinzufügen. Aber nur das Datum ohne Zeit.Datum zu Oracle hinzufügen Datenbanktyp Datum

Wenn ich einen variablen Typ haben DateTime funktioniert es aber fügt mit der Zeit 00:00:00 ein.

Ich habe versucht, aber es hält mich Eingabefehler.

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

Das ist mein Datum Variable

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 

Und das ist mein Einfügen auf Datenbank

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 Termine immer eine Zeit haben, auch wenn es Mitternacht ist. Ob Sie das anzeigen, ist eine andere Sache. Mit 'to_date ('2016/30/03', 'DD-MON-YY')', warum verwenden Sie eine Formatmaske, die nicht mit dem String-Literal übereinstimmt, das Sie haben? Was erzeugt 'ToShortDateString()'? Und warum setzen Sie diesen Parameter als String und nicht als Datum? –

+1

"2016/30/03" stimmt nicht mit der Formatzeichenkette "DD-MON-YY" überein, was ist "Eingabefehler"? Hast du eine Ausnahme, wenn ja, welche? – dlatikay

+0

Der Fehler ist "SQL-Fehler: ORA-01861: Literal stimmt nicht überein Formatzeichenfolge" und ToShortDateString() gibt mir nur das Datum ohne Datum –

Antwort

1

Sie eine check Einschränkung hinzufügen können, um zu validieren, dass die Eingabe keine Zeitkomponente hat:

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

Dadurch wird sichergestellt, dass in der Spalte in der Tabelle keine Zeitkomponente vorhanden ist. Es wird jedoch ein Fehler zurückgegeben, wenn update oder insert ein Datum mit einem Wert festlegt. Daher liegt es an der Anwendung, korrekte Daten einzufügen, um den Fehler zu vermeiden.

Eine andere Alternative besteht darin, einen Trigger zu verwenden, um jede Zeitkomponente zu entfernen. Persönlich finde ich das Overkill, wenn Sie die check Einschränkung haben.

+0

Das OP scheint bereits mit der Zeit um Mitternacht einzufügen, will aber einen Datentyp, der überhaupt keine Zeit hat (glaube ich). Das gibt es natürlich nicht. Dies ist nützlich, um sicherzustellen, dass eine andere Zeit nicht zufällig festgelegt wird, aber ich bin mir nicht sicher, ob das wirklich gefragt wurde. –

0

Format to_date('2016/30/03','DD-MON-YY') stimmt nicht überein.

Es muss entweder to_date('03/MARCH/16','DD-MON-YY') oder (vorzugsweise) sein to_date('2016/30/03','YYYY/DD/MM')