2016-09-12 2 views
0

Сообщение об исключении я получаю просто:SqlDateTime перелив и все DateTime поле Valid

переполнения SqlDateTime должно быть между 1/1/1753 12:00:00 AM и 12/31/9999 12:59 : 59 PM``

Это код VB 2013, который использует Linq для SQL:

Dim BQCust = (
    From c In FinDB.Customers 
    Where c.Customer_Account = 2000223).FirstOrDefault 
FinDB.SubmitChanges(ConflictMode.ContinueOnConflict) 

Там не было никаких изменений, сделанные в этом примере. Я вручную проверил все 6 полей datetime в объекте BQCust типа Customer и не соответствует условию ошибки. Все, кроме 1 из них, помечены, чтобы разрешить Nulls. Значение 1, которое не имеет значения # 5/14/2016 9:20:03 AM #. Кроме того, не все ли они должны быть действительными для включения в таблицу SQL DB, из которой я их извлекаю? Итак, какие данные вызывают это исключение?

CREATE TABLE [dbo].[Customers](
    [RecIdent] [int] IDENTITY(1,1) NOT NULL, 
    [Customer Account] [decimal](18, 0) NOT NULL, 
    [Customer Name] [varchar](255) NULL, 
    [Company] [varchar](255) NULL, 
    [Customer Status] [varchar](255) NULL, 
    [Address 1] [varchar](255) NULL, 
    [Address 2] [varchar](255) NULL, 
    [City] [varchar](50) NULL, 
    [State] [varchar](50) NULL, 
    [Zip Code] [char](10) NULL, 
    [County] [varchar](50) NULL, 
    [Date Created] [datetime] NULL, 
    [Account Type] [varchar](255) NULL, 
    [Sales Representative] [varchar](50) NULL, 
    [Renewal Date] [datetime] NULL, 
    [Account Manager] [varchar](50) NULL, 
    [Acceptance Date] [datetime] NULL, 
    [Voided Date] [datetime] NULL, 
    [Expiration Date] [datetime] NULL, 
    [LastChanged] [datetime] NOT NULL CONSTRAINT [DF_Customers_LastChanged] DEFAULT (getdate()), 
CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED 
+0

Возможно, вам придется опубликовать полный код из базы данных db, изменить и перенести на db. Это возможность потерять значение datetime, так как значение по умолчанию .NET DateTime равно 0001/01/01, что нарушает минимальное значение datetime SqlServer. –

+0

Буквально, чтобы изолировать проблему, я просто извлек данные и сразу же попытался ее отправить. Никаких изменений не было. Я использовал debug для просмотра объекта Customer. Вот значения, которые я нашел: DateCreated: 11/1/1996, RenewalDate: 12/7/2015, VoidedDate: NULL, ExpirationDate: 12/7/2016 и LastChanged: 5/14/2016. – Ebassador

ответ

0

Пожалуйста, следует отметить, что если вы имеете VoidedDate = NULL (Nothing) в отладчике, это означает, что в .NET 0001-01-01.

Там нет нуля для объекта DateTime в .NET

Если вы хотите отлаживать, попробуйте выбор данные в DataTable, а затем обновить с точно такими же DataTable.

+0

Мне трудно поверить. Таблица определена для использования значений NULL, и этот код работает в течение многих месяцев. Большинство учетных записей имеют нулевое значение в поле VoidedDate. Почему это сейчас проблема? – Ebassador

+0

FinDB - это DataContext, используемый Linq to SQL. В среде IDE свойство VoidedDate показывает Nullable = True. – Ebassador

+0

Обновление системы/версии? Любая модификация класса пользовательских объектов? Это происходит со всеми записями или только с одним? –

0

Я нашел проницательное наблюдение в другом потоке StackOverflow.

SubmitChanges() применяет каждое изменение с момента последнего вызова SubmitChanges() или создал контекст. Вы можете определить, что все изменения связаны с просмотром db.GetChangeSet(). Любая дата/время может быть причиной столбца любого затронутого объекта - например, если имеет какое-либо время datetime со значением по умолчанию DateTime.MinValue, это вне диапазона для SQL Server. - mellamokb Apr 17 '13 at 16:11

Это моя проблема !! Я попробовал отправить, прежде чем получить новое значение для BQCust и все еще получил ошибку. Я никогда раньше не использовал метод GetChangeSet, но теперь буду. Спасибо за помощь!

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