字符串未被识别为文本框的有效日期时间错误

本文关键字:有效日期 时间 错误 文本 识别 字符串 | 更新日期: 2023-09-27 18:35:31

>我有一个代码,可以从前端添加用户数据。但是在单击按钮时提交代码时,我收到以下错误

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

请参阅代码为什么会发生这种情况。

protected void btnSubmit_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultCSRConnection"].ConnectionString);
        using (SqlCommand cmd = conn.CreateCommand())
        {
            conn.Open();
            SqlCommand cmd1 = new SqlCommand("Insert into tbl_teachers_profile (NgoId,first_name, last_name,dob,gender,designation, joining_date,leaving_date,active) values (@NgoId,@first_name, @last_name,@dob,@gender,@designation,@joining_date,@leaving_date,@active)", conn);
            cmd1.Parameters.Add("@NgoId", SqlDbType.Int).Value = ddlNgoName.SelectedValue;
            cmd1.Parameters.Add("@first_name", SqlDbType.VarChar).Value = txtfirstname.Text;
            cmd1.Parameters.Add("@last_name", SqlDbType.VarChar).Value = txtlastname.Text;
            cmd1.Parameters.Add("@dob", SqlDbType.DateTime).Value = Convert.ToDateTime(txtdateofbirth.Text);
            cmd1.Parameters.Add("@gender", SqlDbType.VarChar).Value = ddlgender.SelectedValue;
            cmd1.Parameters.Add("@designation", SqlDbType.NVarChar).Value = txtdesgination.Text;
            cmd1.Parameters.Add("@joining_date", SqlDbType.DateTime).Value = Convert.ToDateTime(txtdoj.Text);
            cmd1.Parameters.Add("@leaving_date", SqlDbType.VarChar).Value = Convert.ToDateTime(txtdol.Text);
            cmd1.Parameters.Add("@active", SqlDbType.Bit).Value = Convert.ToInt32(ddlActiveInactive.SelectedValue);
            cmd1.ExecuteNonQuery();
            conn.Close();
            ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('page added sucessfully');window.location ='csrteachersprofile.aspx';", true);
        }
    }

我尝试调试它,值显示为";

请帮忙

前端代码:-

 <asp:TextBox ID="txtdateofbirth" CssClass="form-control" runat="server" ValidationGroup="AddNew" ReadOnly="true"></asp:TextBox>
                                                        <asp:RequiredFieldValidator ID="reqdob" runat="server" ControlToValidate="txtdateofbirth" ErrorMessage="Date of birth is required" ValidationGroup="AddNew" CssClass="error-class"></asp:RequiredFieldValidator>

字符串未被识别为文本框的有效日期时间错误

我认为主要问题出在您的aspx html代码中,当您设置ReadOnly属性时。

我建议您应该删除它,并按如下所示进行更改。

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

您还需要对所有三个文本框的代码隐藏进行更改,如下所示:

cmd1.Parameters.Add("@dob", SqlDbType.DateTime).Value = Convert.ToDateTime(txtdateofbirth.Text);

请让我知道它是否有效。!!

部分问题是数据逻辑和 UI 逻辑之间没有业务逻辑。数据逻辑不应直接访问控件。

一件事是第一件事。代码中有以下几行:

cmd1.Parameters.Add("@joining_date", SqlDbType.DateTime).Value = Convert.ToDateTime(txtdoj.Text);
cmd1.Parameters.Add("@leaving_date", SqlDbType.VarChar).Value = Convert.ToDateTime(txtdol.Text);

我认为leaving_date应该是日期时间而不是VarChar。这是问题#1。第二个问题是,如果日期无效或空白,您想怎么做?如果为空,它应该在数据库中为 null 吗?如果是这样,您需要执行以下操作:

cmd1.Parameters.Add("@joining_date", SqlDbType.DateTime).Value = string.IsNullOrWhitespace(txtdoj.Text) ? System.DBNull.Value : Convert.ToDateTime(txtdoj.Text);
cmd1.Parameters.Add("@leaving_date", SqlDbType.DateTime).Value = string.IsNullOrWhitespace(txtdol.Text) ? System.DBNull.Value : Convert.ToDateTime(txtdol.Text);
这将检查日期值是空还是空,

如果是,它将弹出日期的空值。

不过,您确实需要在此处粘贴业务逻辑层。您的 UI 应该与此业务逻辑层通信,该业务逻辑层应检查数据的健全性,如果一切正常,则调用数据层。

试试这个:

 DateTime.ParseExact(txtdoj.Text, "yyyy-MM-dd",System.Globalization.CultureInfo.InvariantCulture);