SqlDateTime overflow在简单的LINQ,C#.Net Web Page上出错

时间:2010-03-10 20:57:58

标签: c# .net linq overflow sqldatetime

我正在创建一个简单的页面,只是使用C#从.Net中的文本框中插入一些数据。我收到溢出错误,说明日期必须在特定范围内。在txtBirthdate框中输入的文本将类似于:01/01/1980。

调试时,Client1 _Birthdate对象显示{1/1/1980 12:00:00}。所以据我所知,它正在做它应该做的事情。提前感谢您的帮助。

protected void Button1_Click(object sender, EventArgs e)
{
    DataClasses1DataContext db = new DataClasses1DataContext();

    Client client1 = new Client
    {
        FirstName = txtFirstName.Text.ToString(),
        LastName = txtLastName.Text.ToString(),
        MiddleInitial = Convert.ToChar(txtMI.Text),
        Alias = txtAlias.Text.ToString(),
        Address = txtAddress.Text.ToString(),
        City = txtCity.Text.ToString(),
        State = txtState.Text.ToString(),
        Zip = Convert.ToInt32(txtZip.Text),
        Phone = txtPhone.Text.ToString(),
        Birthdate = Convert.ToDateTime(txtBirthdate.Text.ToString()),
        SSN = Convert.ToInt32(txtSSN.Text),
        DLNumber = txtDLNumber.Text.ToString(),
        Gender = Convert.ToByte(ddGender.Text),
        PrimaryRace = Convert.ToByte(ddPrimaryRace.Text),
        SecondaryRace = Convert.ToByte(ddSecondaryRace.Text),
        Ethnicity = Convert.ToByte(ddEthnicity.Text),
        Veteran = Convert.ToBoolean(ddVeteranStatus.Text),
        HoH = Convert.ToBoolean(ddHoH.Text)
    };

    db.Clients.InsertOnSubmit(client1);
    db.SubmitChanges();
}

2 个答案:

答案 0 :(得分:1)

Gregoire完全正确。我回去看了,我有一个日期戳,但在SQL中为getdate()设置了一个默认值。我以为我仍然可以插入而不必传递datestamp值。显然不是。我选择使用DateTime.Now从C#代码填充它,无论如何它实际上更好!

答案 1 :(得分:0)

如果您要将日期时间插入SQL-Sever,您可能需要检查其范围,因为C#DateTime.MinValue与SQL DateTime.MinValue不同。

C#DateTime MinValue = 1/1/0001

SQL DateTime MinValue = 1/1/1753

另外

SQL SmallDateTime MinValue = 1/1/1900

C#DateTime是一个不可为空的变量类型。因此,在插入DAL中的表之前,请确保它不为空。如果为NULL,则将使用MinValue(或存储在内存中的任何随机值)。