我们有一个非常奇怪的错误,当我们想从WCF服务中保存某些东西时,有时会出现这个错误。我们保存的对象包含无效的日期时间,我们都在保存之前检查它们。当我们看到这个错误时,数据库有时会挂起,并且WCF处于错误状态。当我重新启动数据库和托管WCF的IIS Web应用程序并尝试再次保存时。它的工作原理.. 我们是一无所知,所以如果任何人有一些建议,请分享与NHibernate不一致的SQLDateTime溢出
以下是错误:
2010-03-05 10:21:34311 [5] ERROR ProjectX.Business.TTExceptionLogger - 异常ReceiveResultsForMobile()中的某处:{0} Castle.Services.Transaction.CommitResourceException:无法提交事务,一个(或多个)资源失败---> System.Data.SqlTypes.SqlTypeException:SqlDateTime溢出。必须介于1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。 在System.Data.SqlTypes.SqlDateTime.FromTimeSpan(TimeSpan值) 在System.Data.SqlTypes.SqlDateTime.FromDateTime(DateTime值) 在System.Data.SqlClient.MetaType.FromDateTime(DateTime的日期时间,字节CB) 在System.Data.SqlClient.TdsParser.WriteValue(Object value,MetaType type,Byte scale,Int32 actualLength,Int32 encodingByteSize,Int32 offset,TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.TdsExecuteRPC(_SqlRPC [] rpcArray,Int32 timeout ,布尔型inSchema,SqlNotificationRequest notificationRequest,TdsParserStateObject stateObj,布尔isCommandProc) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteRe ader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method,DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result,String methodName,Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery( )NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand cmd) at NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation expectation) at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id,Object [] fields,Object [])对象rowId,布尔型[] includeProperty,Int32 j,对象oldVersion,对象obj,SqlCommandInfo sql,ISessionImplementor会话)NHibernate.Persister.Entity.AbstractEntityPersister.UpdateOrInsert(Object id,Object [] fields,Object [] oldFields) 对象rowI d,Boolean [] includeProperty,Int32 j,Object oldVersion,Object obj,SqlCommandInfo sql,ISessionImplementor session) at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id,Object [] fields,Int32 [] dirtyFields,Boolean hasDirtyCollection,对象[] oldFields,对象oldVersion,对象OBJ,在NHibernate.Engine.ActionQueue.ExecuteActions在NHibernate.Engine.ActionQueue.Execute(IExecutable可执行) 在NHibernate.Action.EntityUpdateAction.Execute() 对象ROWID,ISessionImplementor会话) (IList的列表) 在NHibernate.Engine.ActionQueue.ExecuteActions() 在NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource会议) 在NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent事件) 在NHibernate.Impl.SessionImpl.Flush() 在NHibernate.Transaction.AdoTransaction.Commit() 在Rhino.Commons.NHibernateTransactionAdapter.Commit() 在Rhino.Commons.Facilities.RhinoTransactionResourceAdapter.Commit() 在城堡。 Services.Transaction.AbstractTransaction.Commit() --- Castle.Services.Transaction.StandardTransaction处的Castle.Services.Transaction.AbstractTransaction.Commit() 处的内部异常堆栈跟踪--- 的结尾。提交() 在Castle.Facilities.AutomaticTransactionManagement.TransactionInterceptor.Intercept(IInvocation调用) 在Castle.DynamicProxy.AbstractInvocation.Proceed() 在IReceiveServiceProxy61c28a82c9a24e96957e32292b924889.Save(接收实例) 在WcfInterfaceService.MobileServices.SaveReceiveLines(IEnumerable的1 receiveLines, String warehouseCode, String username, String deviceNumber, Boolean removeOldReceiveLines) in D:\Project Docs\Clients\ClientX 09.08\Projects\ProjectX\ProjectX.WcfInterfaceService\MobileServices.svc.cs:line 567 at WcfInterfaceService.MobileServices.ProcessReceiveResults(List
1 receiveLines ,字符串warehouseCode,字符串用户名,字符串deviceNumber)在D:\ Project Docs \ Clients \ ClientX 09.08 \ Projects \ ProjectX \ ProjectX.WcfInterfaceService \ MobileServices.svc.cs:line 770 at WcfInterfaceService.MobileServices.ProcessResultsFromMobile(String receiveResult,String D:\ Project Docs \ Clients \ ClientX 09.08 \ Projects \ ProjectX \ ProjectX.WcfInterfaceService \ MobileServices.svc.cs:line 668
数据库是MSSQL 2005 导致异常的数据很难说。它有两种方法,但是当我们检查对象中的日期时,它们都包含有效的日期。我们现在将日期类型更改为datetime而不是smalldatetime。问题在于有时出现问题,并不总是 – Sven 2010-03-08 12:03:47
什么样的日期,我的意思是引起异常的日期的值是什么,比如3/8/2009 – Paco 2010-03-08 19:41:03
我们发现什么地方出错了 某处属性(datatime)没有正确设置,导致日期时间溢出 – Sven 2010-03-13 15:55:54