Переполнение SqlDateTime при вводе значения с помощью DateTime.Now
В последнее время у меня довольно странная ошибка при попытке сделать db.SubmitChanges()
:
Переполнение SqlDateTime. Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.
Дело в том, что я использую DateTime.Now
для установки свойства в моем объекте, а после вызова Response.Write(DateTime.Now.ToString());
он показывает 17-04-2013 18:03:13
, как и должно быть.
Раньше этого не происходило, и теперь функция всегда ломается. Я совершенно незнакомый - дата на моем SQL-сервере, похоже, в порядке.
Что может вызвать это?
Edit
Я не думаю, что это помогло бы (слишком просто иметь какие-то ошибки 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;
}
}
Ответы
Ответ 1
на самом деле проблема SQL DateTime
=/= C# Datetime
вам нужно изменить 2 вещи
-
База данных изменит тип поля с DateTime
на DateTime2
-
Вы должны быть явным
SqlCommand cmd = new SqlCommand("insertsomeDate", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@newDate", SqlDbType.DateTime2).Value = yourDate; //<- as example
вы можете найти более подробную информацию здесь, здесь и здесь
Ответ 2
Скорее всего, вы забыли инициализировать поле даты - вы уверены, что вы их установили и не добавили новый? Обычно я получаю это, когда добавляю новое поле даты в DBML, когда он пытается вставить 01/01/0001 00:00:00
Если это не помогло, установите New StringWriter в DB.Log, прежде чем выполнять DB.SubmitChanges и затем изучите DB.Log.ToString(можно сделать в отладчике). Это должно показать вам запрос и все параметры (внизу), чтобы вы могли увидеть совпадение с тем, какой параметр вызывает проблему.
Еще одна вещь, которая помогает в этой проблеме - использовать DB.GetChangeSet(), чтобы проверить, какие записи и быть вставлены/обновлены до вызова SubmitChanges (не могу представить, что удаление может вызвать это)