当我在 Oracle 日期字段中插入最大日期时:
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 对象保持 null。这意味着它无法读回记录。这是一个错误吗?某处舍入不匹配?
最佳答案
这是因为数据库中的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
这意味着数据库中的值是 Date
类型,并且包含以秒为单位但没有毫秒的时间,而参数将转换为 timestamp
数据类型,该数据类型确实包含毫秒。
因此,如果您确实想在 where 子句
中使用它,请尝试如下操作:
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 日期时间.MaxDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11119473/