Переполнение 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
toDateTime2
-
запрос вы должны быть явными
SqlCommand cmd = new SqlCommand("insertsomeDate", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@newDate", SqlDbType.DateTime2).Value = yourDate; //<- as example
скорее всего, вы забыли инициализировать поле даты - вы уверены, что установили их все и не добавили новое? Обычно я получаю это, когда добавляю новое поле даты в DBML, когда он пытается вставить 01/01/0001 00:00: 00
Если это не помогает, установите новый StringWriter на DB.Войдите, прежде чем делать DB.SubmitChanges и изучить БД.Бревно.ToString впоследствии (можно сделать в отладчике). Это должно показать вам запрос и все параметры (внизу), чтобы вы могли видеть сопоставьте, какой параметр вызывает проблему.
еще одна вещь, которая помогает с такой проблемой, - это использование DB.GetChangeSet (), чтобы проверить, какие записи и вставляются/обновляются перед вызовом SubmitChanges (не могу представить, что удаление может вызвать это)