C# - 甲骨文在桌面和服务器上的日期不同
C# - Oracle Dates Different on Desktop vs Server
我 运行宁 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;
在数据库包中,日期为:
25-NOV-20
我在服务器上安装了相同的 ODAC,Windows 2016,并将我的应用程序移动到它。但是当我 运行 它时,日期在数据库中显示为:
20-11-25
现在数据库包抛出错误:
ORA-01858: a non-numeric character was found where a numeric was expected
这在我使用 32 位 Oracle 时没有发生,日期显示为 20 年 11 月 25 日,它只发生在 64 位客户端上,并且只发生在服务器上,而不是我的桌面上。
知道如何解决这个问题吗?
您依赖隐式日期转换来显示它并将其作为字符串输入。为了安全起见,您需要使用具有明确日期格式的转换函数。
例如。 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 位数。
我 运行宁 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;
在数据库包中,日期为:
25-NOV-20
我在服务器上安装了相同的 ODAC,Windows 2016,并将我的应用程序移动到它。但是当我 运行 它时,日期在数据库中显示为:
20-11-25
现在数据库包抛出错误:
ORA-01858: a non-numeric character was found where a numeric was expected
这在我使用 32 位 Oracle 时没有发生,日期显示为 20 年 11 月 25 日,它只发生在 64 位客户端上,并且只发生在服务器上,而不是我的桌面上。
知道如何解决这个问题吗?
您依赖隐式日期转换来显示它并将其作为字符串输入。为了安全起见,您需要使用具有明确日期格式的转换函数。
例如。 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 位数。