将日期添加到Oracle数据库类型日期

时间:2016-03-31 11:33:00

标签: c# oracle datetime

我想在数据库中添加日期。但只有没有时间的日期。

如果我有一个变量类型 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();

2 个答案:

答案 0 :(得分:1)

您可以添加check约束来验证输入没有时间组件:

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

这将确保表中的列中没有时间组件。但是,如果updateinsert使用值设置日期,则会返回错误。因此,应用程序可以插入正确的数据以避免错误。

另一种方法是使用触发器删除任何时间组件。就个人而言,如果你有check约束,我认为这是过度的。

答案 1 :(得分: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')