字符串未被识别为文本框的有效DateTime错误

时间:2014-12-29 15:06:17

标签: c# asp.net datetime

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

  

字符串未被识别为有效的DateTime。

请查看代码原因。

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>

3 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

您的部分问题是数据逻辑和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应该是DateTime而不是VarChar。那个问题#1。第二个问题是,如果无效或空白日期,您想做什么?如果它的空白,它应该在数据库中为空吗?如果是这样,你需要做这样的事情:

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应该与此业务逻辑层进行通信,该层应检查数据的完整性,如果一切正常,则调用数据层。

答案 2 :(得分:0)

我认为主要的问题是你的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);

请告诉我它是否有效。!!