当我在Oracle日期字段中插入maxdate时:

using (OracleCommand Cmd = new OracleCommand("insert into test (mydate) values (:mydate)", OracleConnection))
{
    Cmd.Parameters.Add(new OracleParameter(":mydate", DateTime.MaxValue));
    Cmd.ExecuteNonQuery();
}


并尝试获取值:

using (OracleCommand Cmd = new OracleCommand("select mydate from test where mydate=:mydate", OracleConnection))
{
    Cmd.Parameters.Add(new OracleParameter(":mydate", DateTime.MaxValue));
    object MyDate = Cmd.ExecuteScalar();
}


MyDate对象保持为空。这意味着它无法读回记录。这是错误吗?一些舍入不匹配的地方?

最佳答案

这是因为数据库中的DateDateTime.MaxValue不同。
它既不是相同的数据类型也不是相同的精度。

试试这个查询:

OracleCommand Cmd = new OracleCommand("select dump(mydate), dump(:mydate) from test where rownum=1", OracleConnection)


结果将是这样的:

dump(mydate):  Typ=12 Len=7: 199,199,12,31,24,60,60
dump(:mydate): Typ=180 Len=11: 199,199,12,31,24,60,60,59,154,201,156


这意味着DB中的值的类型为Date,并且包含带秒但不带毫秒的时间,而该参数将转换为确实具有毫秒的timestamp数据类型。

因此,如果您确实想在where clause中使用它,请尝试如下操作:

using (OracleCommand Cmd = new OracleCommand("select mydate from test where trunc(mydate, 'mi') = trunc(:mydate, 'mi')", OracleConnection))
         {
             Cmd.Parameters.Add(new OracleParameter(":mydate", DateTime.MaxValue));
             object MyDate = Cmd.ExecuteScalar();
         }


请注意,这也会截断秒数

关于c# - odp.net DateTime.MaxDate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11119473/

10-10 16:13