c# - odp.net 日期时间.MaxDate

标签 c# .net oracle odp.net

当我在 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。这意味着它无法读回记录。这是一个错误吗?某处舍入不匹配?

最佳答案

这是因为数据库中的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

这意味着数据库中的值是 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/

相关文章:

java - 在数据库中存储 XML 数据 - 许多表与在列中转储 xml

sql - 带触发器的物化 View ?

sql - "HAVING ... GROUP BY"和 "GROUP BY ... HAVING"之间的区别

c# - 如何在没有重新排序列表的情况下更新列表顺序?

c# - Web 服务 VS。 Aspx 页面 : Pros and Cons

c# - 来自现场设备的 UDP 数据包不会通过 azure 基础设施到达我的服务

c# - 无法从 Nuget 安装包 System.Net.Http

c# - 链接 Task.WhenAll()

asp.net - 两种类型的 asp.net 核心 Web 应用程序?

c# - 如何使用 Dapper 从数据库中检索单个值