C# 设置日期格式,以便将其写入Oracle(“非有效月份”错误)
找不到合适的语法。这是我在ASP端的字段:C# 设置日期格式,以便将其写入Oracle(“非有效月份”错误),c#,oracle,date,C#,Oracle,Date,找不到合适的语法。这是我在ASP端的字段: <input type="text" id="EI_Open_AuditStartDt" class="datepicker" runat="server" name="EI_Open_AuditStartDt" value='<%#Eval("Audit_Start_Date") %>' style="width: 100px" /> 问题是,当它到达字符串StartDt时,它仍然会看到值,比如说,“03
<input type="text" id="EI_Open_AuditStartDt" class="datepicker" runat="server"
name="EI_Open_AuditStartDt" value='<%#Eval("Audit_Start_Date") %>'
style="width: 100px" />
问题是,当它到达字符串StartDt时,它仍然会看到值,比如说,“03/24/2017”,而不是“24-MAR-17”,因此我得到了“Not a valid month”错误
有人能看出我做错了什么吗
我建议使用格式插入值,即
yyyy-MM-dd
var StartDt = Date.ParseExact(EI_Open_AuditStartDt.Value,"dd-MM-yyyy", CultureInfo.InvariantCulture););
//.....
cmd.Parameters.AddWithValue("v_StartDt", OracleType.DateTime).Value = StartDt.ToString("yyyy-MM-dd");
尽管如此,您很有可能取消param add中的日期格式,只需将StartDt
对象交给它即可
cmd.Parameters.AddWithValue("v_StartDt", OracleType.DateTime).Value = StartDt;
我建议使用格式插入值,即
yyyy-MM-dd
var StartDt = Date.ParseExact(EI_Open_AuditStartDt.Value,"dd-MM-yyyy", CultureInfo.InvariantCulture););
//.....
cmd.Parameters.AddWithValue("v_StartDt", OracleType.DateTime).Value = StartDt.ToString("yyyy-MM-dd");
尽管如此,您很有可能取消param add中的日期格式,只需将StartDt
对象交给它即可
cmd.Parameters.AddWithValue("v_StartDt", OracleType.DateTime).Value = StartDt;
格式为C#var StartDt=Date.FormatExact(EI_Open_AuditStartDt.Value,“DD/MM/YY”)代码>或是否精确到您的数据库nls\u date\u格式
或者您可以使用c#DateTime并执行以下操作,注意函数返回bool,您可以在if
操作符中检查它,然后将myDTvar
分配给命令参数。
日期时间myDTvar;
DateTime.TryParseExact(StartDt,“dd-mmm-yyyy”,null,
DateTimeStyles.None,out myDTvar)
格式为C#var StartDt=Date.FormatExact(EI_Open_AuditStartDt.Value,“DD/MM/YY”)代码>或是否精确到您的数据库nls\u date\u格式
或者您可以使用c#DateTime并执行以下操作,注意函数返回bool,您可以在if
操作符中检查它,然后将myDTvar
分配给命令参数。
日期时间myDTvar;
DateTime.TryParseExact(StartDt,“dd-mmm-yyyy”,null,
DateTimeStyles.None,out myDTvar)
我想到了这个,它成功了:
DateTime dt1 = Convert.ToDateTime(EI_Open_SubmissionDt.Value);
var SubDt = String.Format("{0:dd-MMM-yyyy}", dt1);
有谁比我(几乎每个人都是如此)有更多的C#/Oracle经验,愿意在这上面捅洞吗?这是一个合理的答案,还是有潜在的问题?我想出了这个答案,它奏效了:
DateTime dt1 = Convert.ToDateTime(EI_Open_SubmissionDt.Value);
var SubDt = String.Format("{0:dd-MMM-yyyy}", dt1);
有谁比我(几乎每个人都是如此)有更多的C#/Oracle经验,愿意在这上面捅洞吗?这是一个合理的答案,还是有潜在的问题?我的猜测是存储过程使用的是字符串而不是日期参数。@GordonLinoff会说不是有效的日期而不是月份吗?无论哪种方式,您都很可能是对的,因为它显示的是OracleType.DateTime
,并且插入了一个字符串(不是很好吗?)嗯,这很有意义。那个么,我该如何正确地格式化它,以便它可以作为日期传递呢?我建议使用格式。i、 e.yyyy-MM-dd
据我所知,Oracle数据库中出现了错误,这意味着OracleNLS\u-DATE\u格式与dd-mmm-yy
不同。如果您有权访问oracle过程,您可以在那里设置立即执行'alter session set nls_date_format='dd-mmm-yy'
此命令,或者您可以在同一会话中从客户端执行它,或者将字符串文本格式更改为db格式。我猜您的DB格式是DD/MM/YY
。我猜存储过程使用的是字符串而不是日期参数。@GordonLinoff它不是说一个无效的日期而不是月份吗?无论哪种方式,您都很可能是对的,因为它显示的是OracleType.DateTime
,并且插入了一个字符串(不是很好吗?)嗯,这很有意义。那个么,我该如何正确地格式化它,以便它可以作为日期传递呢?我建议使用格式。i、 e.yyyy-MM-dd
据我所知,Oracle数据库中出现了错误,这意味着OracleNLS\u-DATE\u格式与dd-mmm-yy
不同。如果您有权访问oracle过程,您可以在那里设置立即执行'alter session set nls_date_format='dd-mmm-yy'
此命令,或者您可以在同一会话中从客户端执行它,或者将字符串文本格式更改为db格式。我猜您的DB格式是DD/MM/YY
。