2016-03-31 33 views
0

Veritabanına bir tarih eklemek istiyorum. Ama sadece zaman olmayan tarih.Tarih: Oracle Veritabanı Türü Tarih

DateTime değişken türüne sahipseniz, ancak 00:00:00 saatiyle ekler.

Bunu denedim ama devam et bana giriş hatası veriyor.

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

Bu değişken benim tarih

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 

Ve bu Girdi hiçbir zaman bileşenine sahip olduğunu doğrulamak için bir check sınırlaması ekleyebilir Veritabanı

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 hep gece yarısı oldu bile bir zaman var tarihleri. Başka bir konu olup olmadığını göster. To_date ('2016/30/03', 'DD-MON-YY') 'ile neden sahip olduğunuz dizgi ile uyuşmayan bir biçim maskesi kullanıyorsunuz? ToShortDateString() işlevi nedir? Ve neden bu parametreyi bir tarih yerine bir dize olarak ayarlıyorsunuz? –

+1

"2016/30/03", "DD-MON-YY" biçim dizisiyle eşleşmiyor, "giriş hatası" nedir? evet ise, bir istisna var mı? – dlatikay

+0

Hata "SQL hatası: ORA-01861: değişmez biçim dizesi ile eşleşmiyor" ve ToShortDateString() yalnızca tarih –

cevap

1

benim takın geçerli:

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

Bu, tablodaki sütunda zaman bileşeni olmadığından emin olur. Ancak, update veya insert bir değer içeren bir tarih ayarlarsa bir hata döndürür. Bu nedenle, hatayı önlemek için doğru verileri eklemek için uygulamaya kalmıştır. Başka bir alternatif, herhangi bir zaman bileşenini kaldırmak için bir tetikleyici kullanmaktır. Şahsen, ben check kısıtlaması varsa bu overkill olduğunu düşünüyorum.

+0

OP, zaten gece yarısına ayarlanan saatle ekleniyor gibi görünüyor, ancak hiç zamana sahip olmayan bir veri türü istiyor (sanırım). Tabii ki yok ki. Bu, kazayla belirlenen farklı bir süreyi sağlamak için yararlıdır, ama gerçekten sorulmakta olan şeyin bu olduğundan emin değilim. –

0

Biçim to_date('2016/30/03','DD-MON-YY') eşleşmiyor.

O olmalı ya to_date('03/MARCH/16','DD-MON-YY') veya (tercihen) to_date('2016/30/03','YYYY/DD/MM')

İlgili konular