首页 > 解决方案 > C# - 桌面与服务器上的 Oracle 日期不同

问题描述

我正在运行 Windows 10,最近将我的 MVC 应用程序从 32 位更新到 64 位,包括 Oracle 客户端。

我在我的机器上安装了 ODAC1931_x64 并正在使用这个 nuget: https ://www.nuget.org/packages/Oracle.ManagedDataAccess/

当我在桌面上运行该应用程序时,一切正常。我可以像这样将日期传递给我的数据库包:


comm.Parameters.Add(Constants.DATABASE_PARAMETERS.FIELDS.START_DATE, OracleDbType.Date).Value = startDate;

在 DB 包中,日期为:

25-NOV-20 

我在服务器 Windows 2016 上安装了相同的 ODAC,并将我的应用程序移至它。但是当我运行它时,日期在数据库中显示为:

20-11-25

现在 DB 包抛出错误:

ORA-01858: a non-numeric character was found where a numeric was expected

这在我使用 32 位 Oracle 时没有发生,日期为 25-NOV-20,它只发生在 64 位客户端上,并且只发生在服务器上,而不是我的桌面上。

知道如何解决这个问题吗?

标签: c#oraclewindows-server-2016

解决方案


您依靠隐式日期转换来显示它并将其作为字符串输入。为了安全起见,您需要使用具有显式日期格式的转换函数。

例如。to_char(my_date_column,'dd/mm/yyyy hh24:mi:ss')如果你想将日期显示为字符串 to_date('25/11/2020 21:00:00','hh24:mi:ss'),如果你有一个字符串并且想要设置一个日期列。

请记住,2 位数的年份是每个软件工程师在 2000 年前夜以继日工作的原因。始终使用 4 位数。


推荐阅读