我们有一个C#作业正在OdbcDataAdapter对象上查询Oracle数据库(版本12.1.0.2),如下所示:
using (OdbcConnection OdbcConn = source.GetOdbcConnection())
{
OdbcCommand cmd = new OdbcCommand(query, OdbcConn);
cmd.CommandTimeout = 0;
using (OdbcDataAdapter dAdapter = new OdbcDataAdapter(cmd))
{
dAdapter.Fill(fileLoaded);
}
}
查询在选择中包含以下内容:
,TO_CHAR(DEL_DTTM,'YYYY-MM-DD HH24:MI:SS')“交付时间2”
运行以上代码时,返回“ 2018-10-21 02:24:00”。但是,当在SQL Developer(Oracle查询编辑器)中运行相同的查询时,我们得到的是“ 2018-10-21 03:24:00”。
(添加更多详细信息) 此列实际上是“ DATE”类型。并发现,它实际上存储为“ 2018-10-21 07:24:00”,并通过此函数通过视图进行操作:
,to_char(CAST((FROM_TZ(CAST(OB_DEL_BIRTH_DTTM AS TIMESTAMP),'GMT')在时区SESSIONTIMEZONE的日期)作为日期,'YYYY-MM-DD HH24:MI:SS')作为DEL_DTTM
我位于美国/纽约时区,所以我认为正在发生这种转换是将“今天的日期”应用于ODBC连接中的本地化,但是“今天”是GMT -5:00,而日期是被比较是在夏令时期间,因此应为-4:00。
(更多详细信息) 因此,当我在SQL Developer中运行“从Dual选择会话时区”时,我得到了“ America / New_York”,但是通过C#/ ODBC我得到了-5:00。如果我都通过'double选择TZ_OFFSET(sessiontimezone),我得到-5:00。
我的朋友有什么想法吗?