C# 设置日期格式,以便将其写入Oracle(“非有效月份”错误)

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

找不到合适的语法。这是我在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/24/2017”,而不是“24-MAR-17”,因此我得到了“Not a valid month”错误

有人能看出我做错了什么吗

  • 验证存储在Oracle数据库中的数据的格式

  • 尝试以该格式将数据作为原始字符串插入,并查看是否成功

  • 这会将调用代码从影响问题的可能变量中去除

  • 如果这仍然不起作用,您必须查看存储过程,并确定它是否在您不知情的情况下转换格式

  • 如果您不能查看存储过程,那么您必须在调用代码中尝试多种不同的格式,直到找到正确的格式为止

  • 验证存储在Oracle数据库中的数据的格式

  • 尝试以该格式将数据作为原始字符串插入,并查看是否成功

  • 这会将调用代码从影响问题的可能变量中去除

  • 如果这仍然不起作用,您必须查看存储过程,并确定它是否在您不知情的情况下转换格式

  • 如果您不能查看存储过程,那么您必须在调用代码中尝试多种不同的格式,直到找到正确的格式为止


  • 我建议使用格式插入值,即
    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数据库中出现了错误,这意味着Oracle
    NLS\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数据库中出现了错误,这意味着Oracle
    NLS\u-DATE\u格式与
    dd-mmm-yy
    不同。如果您有权访问oracle过程,您可以在那里设置
    立即执行'alter session set nls_date_format='dd-mmm-yy'
    此命令,或者您可以在同一会话中从客户端执行它,或者将字符串文本格式更改为db格式。我猜您的DB格式是
    DD/MM/YY