在我的数据库(oracle 10g)中,我在我的表中:
...
Date_ DATE NOT NULL,
...
在我的WPF应用程序中,我计划使用日历来插入日期,但是现在作为测试我已经手动插入,如下所示:
..., TO_DATE('21/02/16','DD/MM/YY'), ...
问题是当我将这个表从DataSet显示到WPF中的DataGrid时,它总是显示为21/02/2016 12:00:00 AM。但是,sqlplus命令行中的select date_ from tablename;
向我显示21-FEB-2016
,我还在sqlplus中使用trunc(date_)
更新了表格,但时间仍显示在数据网格中
如果我尝试类似
的话query = ("select column1, column2, trunc(date_) from tablename");
或
query = ("select column1, column2, to_date(date_, 'dd/mm/yyyy') from tablename");
然后数据网格中的列名称改为" trunc(date)"但仍然显示时间。
奖金问题:
query = ("select column1, column2, date_ AS Date from tablename");
抛出一个越界异常,为什么?
答案 0 :(得分:0)
以下是您的问题 - 在ORA中您的数据存储为日期[无小时,分钟,秒等]。但是当您在DataTable
中加载DataSet
时,您的.net提供程序会自动将您的Oracle类型转换为DateTime
。如你所知,DateTime
有时间。如果您只想显示日期,您有两种方式。您可以使用<value>.ToString("dd/MM/yy")
to_char
,或者只是编辑您的查询以将日期自动加载为字符串
query = "select column1, column2, to_char(date_, 'dd/mm/yyyy') AS MyDate from tablename";
实际上,有很多方法可以做到,但这里的主要问题是.net类型不匹配oracle类型和某些你需要转换的东西。通常,您显示数据类型的字符串表示形式。但是当你保存时,你将输入转换为DB数据类型。