繁体   English   中英

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

[英]String was not recognized as Valid 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>

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

这是验证的问题:

文本框的日期验证

这是MSDN可用的日期格式:

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

当然,您会因此而出错。 错误发生在

Convert.ToDateTime(txtdol.Text);

您正在尝试转换为null的内容,就像您对编译器说的那样:

Convert.ToDateTime("");

它是空字符串,不能转换。

您可以考虑以下一些选择:

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

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

如果txtdol为null或为空,则返回当前datetime,否则将txtdol转换为datetime并返回。

用户将日期输入到文本框的好方法是使用: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;
        }

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

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

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

根据需要更改代码

收到很多错误之后,像这样

 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);
                        }

而且有效.. !!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM