当我在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对象保持为空。这意味着它无法读回记录。这是错误吗?一些舍入不匹配的地方?
最佳答案
这是因为数据库中的Date
与DateTime.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/