2017-01-23 2 views
0

У меня есть следующая проблема.SQL DateTime Overflow с использованием нескольких операторов LINQ

В приведенном ниже блоке кода первый раз с помощью инструкции if срабатывает, и все идет хорошо. Второй раз через formData.Where ошибки с переполнением SQL DateTime. Возвращаемое значение является строкой и не имеет ничего общего с датами. Запись, на которую ссылается, имеет дату, но ее текущий день. Я изменил порядок, в котором содержатся эти операторы if, и не имеет значения, кто из них первый или второй. второй всегда вызывает исключение.

foreach (string riderGroup in riderGroups) 
      { 
       if (riderGroup == "69") 
       { 
        var deathRiderValue = formData.Where(x => x.FieldName == "rider69Value").Select(x => x.FieldValue).Single().ToString(); 
        var rider = _riderDataService.GetRiderById(Convert.ToInt32(deathRiderValue)); 
        premiumAccount.AddRider(new PolicyRider { Rider = rider, PremiumAccount = premiumAccount, Policy = policy });       
       } 
       if (riderGroup == "211") 
       { 
        var gmabRiderValue = formData.Where(x => x.FieldName == "rider211Value").Select(x => x.FieldValue).Single().ToString(); 
        var rider = _riderDataService.GetRiderById(Convert.ToInt32(gmabRiderValue)); 
        premiumAccount.AddRider(new PolicyRider { Rider = rider, PremiumAccount = premiumAccount, Policy = policy }); 
       } 
       if (riderGroup == "96") 
       { 
        var giveawayPromoValue = formData.Where(x => x.FieldName == "rider96Value").Select(x => x.FieldValue).Single().ToString(); 
        if (giveawayPromoValue == "1") 
        { 
         var rider = _riderDataService.GetRiderById(5); 
         premiumAccount.AddRider(new PolicyRider { Rider = rider, PremiumAccount = premiumAccount, Policy = policy }); 
        } 
       } 
      } 

Любые идеи?

Сведения об исключении: System.Data.SqlTypes.SqlTypeException: переполнение SqlDateTime. Должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 11:59:59 PM.

Вот стек вызовов:

[SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.] 
    System.Data.SqlClient.TdsParser.TdsExecuteRPC(SqlCommand cmd, _SqlRPC[] rpcArray, Int32 timeout, Boolean inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, Boolean isCommandProc, Boolean sync, TaskCompletionSource`1 completion, Int32 startRpc, Int32 startParam) +7688 
    System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds, Boolean describeParameterEncryptionRequest) +2026 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +375 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53 
    System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +161 
    System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +41 
    System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() +14 
    NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd) +347 
    NHibernate.Id.InsertSelectDelegate.ExecuteAndExtract(IDbCommand insert, ISessionImplementor session) +77 
    NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder binder) +112 
    NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Boolean[] notNull, SqlCommandInfo sql, Object obj, ISessionImplementor session) +283 
    NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Object obj, ISessionImplementor session) +391 
    NHibernate.Action.EntityIdentityInsertAction.Execute() +283 
    NHibernate.Engine.ActionQueue.Execute(IExecutable executable) +48 
    NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) +839 
    NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(Object entity, Object id, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) +579 
    NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) +278 
    NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) +118 
    NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event) +219 
    NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event) +232 
    NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event) +347 
    NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent event) +193 
    NHibernate.Impl.SessionImpl.SaveOrUpdate(String entityName, Object obj) +155 
    NHibernate.Engine.SaveUpdateCascadingAction.Cascade(IEventSource session, Object child, String entityName, Object anything, Boolean isCascadeDeleteEnabled) +106 
    NHibernate.Engine.Cascade.CascadeToOne(Object parent, Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) +238 
    NHibernate.Engine.Cascade.CascadeAssociation(Object parent, Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) +101 
    NHibernate.Engine.Cascade.CascadeProperty(Object parent, Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) +135 
    NHibernate.Engine.Cascade.CascadeCollectionElements(Object parent, Object child, CollectionType collectionType, CascadeStyle style, IType elemType, Object anything, Boolean isCascadeDeleteEnabled) +667 
    NHibernate.Engine.Cascade.CascadeCollection(Object parent, Object child, CascadeStyle style, Object anything, CollectionType type) +292 
    NHibernate.Engine.Cascade.CascadeAssociation(Object parent, Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) +188 
    NHibernate.Engine.Cascade.CascadeProperty(Object parent, Object child, IType type, CascadeStyle style, Object anything, Boolean isCascadeDeleteEnabled) +135 
    NHibernate.Engine.Cascade.CascadeOn(IEntityPersister persister, Object parent, Object anything) +588 
    NHibernate.Event.Default.AbstractFlushingEventListener.CascadeOnFlush(IEventSource session, IEntityPersister persister, Object key, Object anything) +130 
    NHibernate.Event.Default.AbstractFlushingEventListener.PrepareEntityFlushes(IEventSource session) +363 
    NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions(FlushEvent event) +203 
    NHibernate.Event.Default.DefaultAutoFlushEventListener.OnAutoFlush(AutoFlushEvent event) +144 
    NHibernate.Impl.SessionImpl.AutoFlushIfRequired(ISet`1 querySpaces) +289 
    NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results) +206 
    NHibernate.Impl.AbstractSessionImpl.List(IQueryExpression queryExpression, QueryParameters parameters) +227 
    NHibernate.Impl.ExpressionQueryImpl.List() +146 
    NHibernate.Linq.DefaultQueryProvider.ExecuteQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery) +72 
    NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression) +93 
    NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression) +50 
    System.Linq.Queryable.Single(IQueryable`1 source) +211 
    FrontOffice.HelperExtensions.FormProcessHelper.AddOnPremiumProcess(Int32 id) in c:\Users\hprentiss\Documents\SI Project\T3 Core\Dev\FrontOffice\HelperExtensions\FormProcessHelper.cs:314 
    FrontOffice.Areas.NewBusiness.Controllers.ImportFormsController.ProcessFormAddOnPremium(Int32 id) in c:\Users\hprentiss\Documents\SI Project\T3 Core\Dev\FrontOffice\Areas\NewBusiness\Controllers\ImportFormsController.cs:135 
    lambda_method(Closure , ControllerBase , Object[]) +161 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +19 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +209 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27 
    System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28 
    System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +15 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49 
    System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +57 
    System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +223 
    System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +223 
    System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +223 
    System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +223 
    System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +15 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +49 
    System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +24 
    System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +102 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +44 
    System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +15 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +16 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +54 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +16 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +44 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +12 
    System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +16 
    System.Web.Mvc.Async.WrappedAsyncResult`1.End() +58 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +44 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +11 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9724953 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 

FormData класс

public class FormData : Entity 
{ 
    public virtual int FormSubmissionID { get; set; } 
    public virtual string FieldName { get; set; } 
    public virtual string FieldValue { get; set; } 

    public FormData() 
    { 

    } 
} 

класса сущностей он наследует

[Serializable] 
public class Entity 
{ 
    public virtual int ID { get; set; } 
    public virtual bool IsActive { get; set; } 
    public virtual DateTime DateCreated { get; set; } 
    public virtual DateTime? DateModified { get; set; } 
    public virtual int? ModifiedBy { get; set; } 

    public Entity() 
    { 
     IsActive = true; 
     DateCreated = DateTime.Now; 
    } 
    public override bool Equals(object obj) 
    { 
     if (ID != 0) 
     { 
      Entity obj2 = obj as Entity; 
      return ((obj2 != null) && (ID == obj2.ID)); 
     } 
     return base.Equals(obj); 
    } 

    public override int GetHashCode() 
    { 
     return (ID != 0) ? ID.GetHashCode() : base.GetHashCode(); 
    } 

    public virtual void Deactivate() 
    { 
     IsActive = false; 
    } 

    public virtual void EncryptFields() 
    { 
    } 

    public virtual object AddHistoryRecord() 
    { 
     return null; 
    } 
} 

FormData Карта

public class FormDataMap : BaseMap<FormData> 
{ 
    public FormDataMap() 
    { 
     Table("tblFormData"); 
     Id(x => x.ID, "FormDataID"); 
     Map(x => x.FormSubmissionID); 
     Map(x => x.FieldName); 
     Map(x => x.FieldValue); 
    }   
} 

Entity Карта

public BaseMap() 
    { 
     Id(x => x.ID); 
     MapEntity(); 
     Map(x => x.IsActive).Not.Nullable().Default("1"); 
     Map(x => x.DateCreated).Not.Nullable().Default("getdate()"); 
     Map(x => x.DateModified); 
     Map(x => x.ModifiedBy); 
    } 
    protected virtual void MapEntity() 
    { 
    } 
+1

Что значит «DateTime overflow»? Где во всем этом коде используется 'DateTime'? Что такое * актуальная * ошибка? Поле 'datetime' не позволит вам хранить недопустимое значение вообще, так как может быть переполнение? Возможно, вы сохраняете даты как строки и пытаетесь применить их к 'DateTime'? Это серьезная ошибка сама по себе. –

+0

Опубликовать * полное исключение, включая его столбец. Вы можете получить его с помощью 'Exception.ToString()'. Также опубликуйте код, который действительно вызывает ошибку. То, что вы разместили здесь, похоже, не использует даты где-либо –

+0

Добавлена ​​трассировка исключения и стека – HarvP

ответ

0

Ваше исключение определяет, что происходит в «FromDate» переменной, он устанавливает нулевой. Используйте там контрольную точку, значение трассировки внутри «fromdate», оно должно быть не менее 1/1/1753 12:00:00 AM и не более 12/31/9999 11:59:59 PM. Эта ошибка возникает, если вы пытаетесь установить переменную типа DateTime в значение null. Объявите переменную как NULL, т. Е. DateTime?. Это решит проблему.

+0

Есть 2 столбца, которые должны быть связаны с DateTime. 1 - DateCreated, который мы не разрешаем быть null и DateModified, который уже является нулевым. – HarvP

+0

fromdate - тип DateTime? –

+0

Нет даты. Я не знаю, где вы это видите. Существует класс FormData, который наследуется от класса Entity, который имеет DateCreated и DateModified. – HarvP

0

Это должна быть комментарием, но это слишком долго: сказала

Как @M Адиль Халид в своем ответе, наиболее распространенные состояния в результате этого исключения пытается поставить значение в SQL Server datetime столбец действительный для C#, но недействительный для SQL Server. Если это может происходить - это ключ, но очень сложно сказать, что вы предоставили.

  1. Какая строка вашего вставленного кода является исключением?

  2. Как насчет этих двух номеров строк в трассировке стека (вставлено ниже)?

FrontOffice.HelperExtensions.FormProcessHelper.AddOnPremiumProcess (Int32 идентификатор) в C: \ Users \ hprentiss \ Documents \ SI Project \ T3 Ядро \ Dev \ FrontOffice \ HelperExtensions \ FormProcessHelper.cs: 314

FrontOffice .Areas.NewBusiness.Controllers.ImportFormsController.ProcessFormAddOnPremium (Int32 id) в c: \ Users \ hprentiss \ Documents \ SI Project \ T3 Core \ Dev \ FrontOffice \ Areas \ NewBusiness \ Controllers \ ImportFormsController.cs: 135

Я думаю, это не ваш собственный код, но вот откуда вы можете понять. Если мы предположим, что Datetime.Now является допустимым значением, как насчет изменения значения null на что-то еще, точно так же, как проверка здравомыслия?

+0

В Datetimes нет ничего. Это NHibernate, уволяющее обновление и определяющее, что нулевая дата должна быть минимальной. – HarvP

+0

Достаточно честный, но это на самом деле «что-то с DateTime». Просто причина, по которой это происходит в NHibernate, не изменяет характер исключения. – SlimsGhost

Смежные вопросы