Переполнение SqlDateTime при вставке значения с DateTime.Сейчас

в последнее время у меня довольно странная ошибка при попытке сделать db.SubmitChanges():

переполнение sqldatetime с. Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 вечера.

суть в том, что я использую только DateTime.Now для установки свойства в моем объекте и после вызова Response.Write(DateTime.Now.ToString()); Это показывает 17-04-2013 18:03:13 так и должно быть.

раньше этого не происходило, и теперь функция всегда ломается. Я совершенно невежественный-дата на моем SQL server кажется ладно.

что может вызвать это?

редактировать

Я не думаю, что это поможет (это слишком просто, чтобы иметь какие-либо ошибки IMO), но есть моя функция:

public bool ReportLogIn(int UserID, string IP, int Succeed ... ) {
    A_UserLoginHistory Report = new A_UserLoginHistory();

    Report.IP = IP;
    Report.UserID = UserID;
    Report.Status = Succeed;
    Report.Date = DateTime.Now; //the only DateTime field
    ...

    try {
        db.A_UserLoginRegistry.InsertOnSubmit(Report);
        db.SubmitChanges();
        return true;
    } catch (Exception e) {
        ErrorLog.AddError(e.ToString());
        return false;
    }
}

2 ответов


на самом деле проблема SQL DateTime =/=C# Datetime

вам нужно изменить 2 вещи

  • база данных измените тип поля с DateTime to DateTime2

  • запрос вы должны быть явными

    SqlCommand cmd = new SqlCommand("insertsomeDate", conn);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@newDate", SqlDbType.DateTime2).Value = yourDate; //<- as example
    

вы можете найти информацию futher здесь,здесь и здесь


скорее всего, вы забыли инициализировать поле даты - вы уверены, что установили их все и не добавили новое? Обычно я получаю это, когда добавляю новое поле даты в DBML, когда он пытается вставить 01/01/0001 00:00: 00

Если это не помогает, установите новый StringWriter на DB.Войдите, прежде чем делать DB.SubmitChanges и изучить БД.Бревно.ToString впоследствии (можно сделать в отладчике). Это должно показать вам запрос и все параметры (внизу), чтобы вы могли видеть сопоставьте, какой параметр вызывает проблему.

еще одна вещь, которая помогает с такой проблемой, - это использование DB.GetChangeSet (), чтобы проверить, какие записи и вставляются/обновляются перед вызовом SubmitChanges (не могу представить, что удаление может вызвать это)