0

嘿伙计们,我一直在尝试解决这个问题,但我正在尝试将新用户添加到学生表中,但我不断收到错误消息:将 nvarchar 数据类型转换为日期时间数据类型导致超出-范围值。

这是我的代码,我认为它与 dob 变量有关。我正在使用视觉工作室 2010。

    SqlConnection insertStu = new SqlConnection(ConString());

    insertStu.Open();

    string dataStu = "INSERT INTO [Student] ([fName], [lName], [dob], [gender], [address],
    [suburb], [postcode], [username], [parentName], [parentContact]) VALUES (@fName, @lName,
    @dob,    @gender, @address, @suburb, @postcode, @username, @parentName, @parentContact)";

    SqlCommand insertStuData = new SqlCommand(dataStu, insertStu);

    insertStuData.Parameters.AddWithValue("@fName", given.Text);
    insertStuData.Parameters.AddWithValue("@lName", surname.Text);
    insertStuData.Parameters.AddWithValue("@dob", dob.Text);
    insertStuData.Parameters.AddWithValue("@gender", gender.Text);
    insertStuData.Parameters.AddWithValue("@address", address.Text);
    insertStuData.Parameters.AddWithValue("@suburb", suburb.Text);
    insertStuData.Parameters.AddWithValue("@postcode", postcode.Text);
    insertStuData.Parameters.AddWithValue("@username", given.Text + surname.Text);
    insertStuData.Parameters.AddWithValue("@parentName", pname.Text);
    insertStuData.Parameters.AddWithValue("@parentContact", phone.Text);
    insertStuData.ExecuteNonQuery();
    Response.Redirect("login.aspx");

感谢我使用以下方法修复它的帮助人员

DateTime bday = Convert.ToDateTime(dob.Text);

在变量收集中我做了以下

insertStuData.Parameters.AddWithValue("@dob", bday);

那是理想的吗,我应该做其他事情吗?

4

2 回答 2

0
insertStuData.Parameters.AddWithValue("@dob", dob.Text);

可能导致问题,确保 dob.Text 是 DateTime 类型而不知道你的表结构,我只是猜测

于 2013-10-30T03:20:59.047 回答
0

如前所述,您在需要日期的地方使用字符串。使用以下内容,当然还有适当的异常处理。

insertStuData.Parameters.AddWithValue("@lName", surname.Text);
/* New Code */
DateTime birthDate = new DateTime();
if(DateTime.TryParse(dob.Text, out birthDate ))    
{
    insertStuData.Parameters.AddWithValue("@dob", birthDate);
}
else
{
    throw new Exception("Date incorectly formatted");
    /*Or However you want to handle the incorectly formatted date*/
}
/* End New Code*/
insertStuData.Parameters.AddWithValue("@gender", gender.Text);

如果您绝对 100% 知道日期将被正确格式化,则可以使用DateTime.Parse而不需要额外的变量和if..else..语句。

于 2013-10-30T03:33:53.717 回答