2010-03-05 3 views
1

У нас очень странная ошибка, что иногда мы получаем эту ошибку, когда хотим что-то сохранить из нашей службы WCF. Объект, который мы сохраняем, содержит НЕТ недействительных дат, мы все проверяем их до сохранения. Когда мы видим эту ошибку, база данных иногда зависает, а WCF находится в неисправном состоянии. Когда я перезапускаю БД и веб-приложение IIS, где размещается WCF, и пытаюсь снова сохранить его. Он работает .. Мы невежественны, так что если кто имеет какой-то совет, пожалуйста, поделитесьНесогласованный переполнение SQLDateTime с NHibernate

Далее следует ошибка:

2010-03-05 10: 21: 34311 [5] ОШИБКА 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 DateTime, Байт Cb) на System.Data.SqlClient.TdsParser.WriteValue (значение объекта, тип MetaType, шкала байтов, int32 actualLength, int32 encodingByteSize, Int32 offset, TdsParserStateObject stateObj) в System.Data.SqlClient.TdsParser.TdsExecuteRPC (_SqlRPC [] rpcArray, Int32 таймаут , булева inSchema, SqlNotificationRequest notificationRequest, TdsParserStateObject stateObj, булева isCommandProc) на System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, булева returnStream, булева асинхронной) в System.Data.SqlClient.SqlCommand.RunExecuteRe Адер (CommandBehavior cmdBehavior, RunBehavior runBehavior, булева returnStream, метод String, DbAsyncResult результат) на System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (результат DbAsyncResult, String имяМетод, булева sendToPipe) на System.Data.SqlClient.SqlCommand.ExecuteNonQuery () в NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery (IDbCommand ЦМД) в NHibernate.AdoNet.NonBatchingBatcher.AddToBatch (IExpectation ожидания) в NHibernate.Persister.Entity.AbstractEntityPersister.Update (ID объекта, Object [] поля, Object [] oldFields, Object rowId, Boolean [] includeProperty, Int32 j, Object oldVersion, Object 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) в NHibernate.Persister.Entity.AbstractEntityPersister.Update (Object id, Object [] fields, Int32 [] dirtyFields, Boolean hasDirtyCollection, Object [] Oldfields, объект oldVersion, OBJ Object, Object RowId, ISessionImplementor сеанс) в NHibernate.Action.EntityUpdateAction.Execute() в NHibernate.Engine.ActionQueue.Execute (IExecutable исполняемого) в NHibernate.Engine.ActionQueue.ExecuteActions (список 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() --- Конец внутренней трассировки стека объектов --- at Castle.Services.Transaction.AbstractTransaction.Commit() at Castle.Services.Transaction.StandardTransaction.Commit() на Castle.Facilities.AutomaticTransactionManagement.TransactionInterceptor.Intercept (IInvocation вызова) на Castle.DynamicProxy.AbstractInvocation.Proceed() на IReceiveServiceProxy61c28a82c9a24e96957e32292b924889.Save (например, Receive) в 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 , String storageCode, String username, String deviceNumber) в D: \ Project Docs \ Clients \ ClientX 09.08 \ Projects \ ProjectX \ ProjectX.WcfInterfaceService \ MobileServices.svc.cs: строка 770 в WcfInterfaceService.MobileServices.ProcessResultsFromMobile (String receiveResult, String storageCode, String username, String deviceNumber) в D: \ Project Docs \ Clients \ ClientX 09.08 \ Projects \ ProjectX \ ProjectX.WcfInterfaceService \ MobileServices.svc.cs: строка 668

ответ

4

Выполняется ли SQL Server 2008? Сегодня я столкнулся с этой же ошибкой при использовании SQL Server 2008. В базе данных я установил столбец «date» вместо «datetime», потому что меня не волнует временная часть. Но в .NET нет типа данных даты, поэтому вы используете datetime.

Для меня я передавал значения null datetime, которые по умолчанию имеют значение 1/1/0001 12:00:00 AM. Таким образом, я получал ту же ошибку, которую вы видите, потому что она включала временную часть.

Для меня мне нужно было присвоить значение datetime значение nullable, и мне также пришлось использовать MsSql2008Dialect в NHibernate, который поддерживает тип данных даты. Более подробная информация о NHibernate and SQL Server 2008 here.

Я бы проверить, чтобы убедиться, что тип вашей базы данных данных установлен правильно, и что вы используете MsSql2008Dialect, если вы используете SQL Server 2008.

1

У меня есть два вопроса, прежде чем я могу дать вам ответ:

  1. Какую базу данных используете?
  2. Какая дата вызывает исключение?

Угадайте, что вы используете базу данных с меньшим диапазоном или точностью datetime, чем вы используете в своем коде. В этом случае исключение не вызвано NHibernate, а функцией базы данных. Это не ошибка, а особенность.

+0

База данных MSSQL 2005 Данные, вызывающие исключение, трудно сказать. Он появляется с двумя методами, но когда мы проверяем даты в объекте, все они содержат допустимую дату. Мы теперь меняем типы дат на datetime вместо smalldatetime. Проблема в том, что проблема возникает иногда, а не всегда – Sven

+0

С какой датой я имею в виду то, что является значением даты, вызывающей исключение, например, 3/8/2009 – Paco

+0

Мы нашли ошибку Где-то свойство (datatime) был установлен неправильно, это вызвало переполнение datetime – Sven

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