【发布时间】:2015-03-10 15:30:20
【问题描述】:
我正在编写一个运行在 Oracle 11.2.0.2.0 数据库之上的 .Net 应用程序,该数据库将日期存储在类型为“TIMESTAMP(6) WITH LOCAL TIME ZONE”的列中。如果列中存储了一个日期并且它属于 DST,则在使用 Oracle.ManagedDataAccess 库时会错误地读取该日期。它似乎总是正确地写入/更新日期。此外,在使用 Oracle.DataAccess 库时,它始终正确处理日期。
在我的示例中,我使用时区“America/New_York”和 08/01/2014 12:00:00 的日期/时间。这是一段错误读取日期的代码:
IDbConnection cxn = new Oracle.ManagedDataAccess.Client.OracleConnection(ConnStr);
// Using the following library works correctly:
// IDbConnection cxn = new Oracle.DataAccess.Client.OracleConnection(ConnStr);
cxn.Open();
var cmd = cxn.CreateCommand();
cmd.CommandText = "alter session set time_zone='America/New_York'";
cmd.ExecuteNonQuery();
cmd.CommandText = "SELECT TEST_DATE FROM TEST_TABLE WHERE ROWNUM=1";
return (DateTime)cmd.ExecuteScalar();
当使用值 08/01/2014 12:00:00 更新列时,将读取为 08/01/2014 11:00:00。如果我使用不属于 DST 的日期(例如 12/01/2014 12:00:00),它会正确读取日期。对此有什么想法吗?我一直在搜索,但没有找到关于这个问题的任何文档。我可能不得不切换回 Oracle.DataAccess,但希望能避免它。提前致谢!
【问题讨论】: