字符串未被识别为有效日期时间

时间:2015-04-04 07:04:09

标签: c# asp.net datetime

我有2个文本框,我必须添加Joining DateLeaving Date

现在,当我添加加入日期并将Leaving date留空并提交表单时,我收到错误

  

字符串未被识别为有效日期时间

这是我的

代码
cmd1.Parameters.Add("@leaving_date", SqlDbType.DateTime).Value = Convert.ToDateTime(txtdol.Text);

我不知道为什么会出错。请帮忙

更新:

文本框代码: -

 <asp:TextBox ID="txtdol" CssClass="form-control" runat="server" ValidationGroup="AddNew" Enabled="true"></asp:TextBox>

5 个答案:

答案 0 :(得分:0)

确保在文本框中以有效格式输入日期。最好的选择是为文本框使用日期验证器,如果输入的日期格式是错误的,则可以显示验证错误而不是RTE。

这是验证的问题:

Date validation for a textbox

这是MSDN的可用日期格式:

https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx

答案 1 :(得分:0)

当然你会得到错误。

中发生的错误
Convert.ToDateTime(txtdol.Text);

你正在尝试转换null的东西,就像你说编译器编译它一样:

Convert.ToDateTime("");

它的emptry字符串,无法转换。

以下是您可以考虑的一些选项:

  1. 检查文本框是否为空并且提供的日期是否有效(客户端或服务器端)
  2. 使用DateTimePicker(如jquery ui datetimepicker)
  3. 使用此代码代替该行末尾的代码

    String.IsNullOrEmpty(txtdol.Text)? DateTime.Now:Convert.ToDateTime(txtdol.Text)

  4. 如果txtdol为null或为空,则返回当前日期时间,否则将txtdol转换为datetime并返回。

答案 2 :(得分:0)

用户输入日期到文本框的好方法是使用: 1- MaskedTextBox   要么 2- DateTimePicker。 要么   如果你想使用文本框,你也可以使用这个代码来检查空值。

 DateTime? nullDateTime = null;
        cmd1.Parameters.Add("@leaving_date", SqlDbType.DateTime).Value = string.IsNullOrEmpty(txtdol.Text.Trim()) ? nullDateTime : Convert.ToDateTime(txtdol.Text.Trim())

并且对于验证文本框,请检查此功能:

private bool validateDate(TextBox arg1)
        {
            DateTime dt;
            bool valid1 = DateTime.TryParseExact(arg1.Text.Trim(), "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out dt);
            if (!string.IsNullOrEmpty(arg1.Text.Trim()) )
            {
                MessageBox.Show("Format Date is wrong! Currect format is(dd/MM/yyyy)", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                arg1.Focus();
                return false;
            }
            return true;
        }

答案 3 :(得分:0)

由于在文本框中输入了无效的日期格式(空格式或格式错误)而发生此错误修复问题修改代码如下所示,使用DateTime.ParsExact

cmd1.Parameters.Add("@leaving_date", SqlDbType.DateTime).Value = DateTime.ParsExact(txtdol.Text,"dd/MM/yyyy",System.Globalization.DateTimeStyles.AllowInnerWhite);

第二个参数也可以改为格式数组。

根据需要更改代码

答案 4 :(得分:0)

在收到这么多错误之后,就像这样

 if (txtdol.Text == null || txtdol.Text == string.Empty)
                        {
                            cmd.Parameters.Add("@leaving_date", SqlDbType.DateTime).Value = DBNull.Value;
                        }
                        else
                        {
                            cmd.Parameters.Add("@leaving_date", SqlDbType.DateTime).Value = Convert.ToDateTime(txtdol.Text);
                        }

它有效.. !!