C#-Oracle在桌面和服务器上的日期不同

C#-Oracle在桌面和服务器上的日期不同,c#,oracle,windows-server-2016,C#,Oracle,Windows Server 2016,我正在运行windows 10,最近将我的MVC应用程序从32位更新为64位,包括Oracle客户端 我在我的机器上安装了ODAC1931_x64,并使用以下nuget: 当我在桌面上运行应用程序时,一切都正常。我可以将日期传递给我的DB包,如下所示: comm.Parameters.Add(Constants.DATABASE_PARAMETERS.FIELDS.START_DATE, OracleDbType.Date).Value = startDate; 在DB包中,日期为: 25

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

我在我的机器上安装了ODAC1931_x64,并使用以下nuget:

当我在桌面上运行应用程序时,一切都正常。我可以将日期传递给我的DB包,如下所示:


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时并没有发生,日期是20年11月25日,它只在64位客户机上发生,只在服务器上发生,而不是在我的桌面上


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

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

例如,
to_char(my_date_列,'dd/mm/yyyyy hh24:mi:ss')
如果要将日期显示为字符串
to_date('25/11/2020 21:00:00','hh24:mi:ss')
如果您有一个字符串并希望设置一个日期列


请记住,2位数的年份是每个软件工程师在2000年前24小时工作的原因。始终使用4位数字。

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

例如,
to_char(my_date_列,'dd/mm/yyyyy hh24:mi:ss')
如果要将日期显示为字符串
to_date('25/11/2020 21:00:00','hh24:mi:ss')
如果您有一个字符串并希望设置一个日期列


请记住,2位数的年份是每个软件工程师在2000年前24小时工作的原因。始终使用4位数字。

当您指定`OracleDbType.Date.Value=startDate`时,则
startDate
应为
DateTime
值,而不是stringYes,当您指定`OracleDbType.Date.Value=startDate`时,则
startDate
应为
DateTime
值,而不是stringYes,它是一个日期时间变量