2015-07-02 5 views
1

Итак, у меня есть интересное задание проверить кого-то еще его код и сразу же наткнулся на проблему при попытке запустить веб-приложение. Когда я нажимаю на определенную кнопку, я получаю Invalid Cast Exception from DateTime to String. Я читал уже много сообщений об этом и пробовал несколько вещей, но не из них, похоже, работает, или я не знаю, как я могу применить его в этом конкретном коде.InvalidCastException DateTime to String C#

Я обратился к проблеме с создателем исходного кода, но в его системе код работает (пока мы используем ту же базу данных и визуальную студию). Поэтому это заставило меня поверить, что это вопрос culture setting (что было вполне возможно, так как он живет в Индии и я в Нидерландах). Я пробовал некоторые вещи с настройкой информации о культуре, но это, похоже, не сработало.

Я действительно не знаю, что именно происходит не так, чтобы я отправил ниже выводы, попытался корректировки, код выхода и код Объяснение:

В веб-приложения пользователь может нажать на определенный номер заказа и когда они делают это, вероятно, видят некоторые детали этого порядка. Хотя при нажатии на нее я получаю cast exception на это:

var updatedBookedHourData = (from b in bookedHourList 
             let BLastDateTime = b.Field<string>("BLastDateTime") == null ? (DateTime?)null : DateTime.Parse(b.Field<string>("BLastDateTime")) 
             let BSyncDateTime = b.Field<string>("BSyncDateTime") == null ? (DateTime?)null : DateTime.Parse(b.Field<string>("BSyncDateTime")) 
             where !BLastDateTime.HasValue || 
             !BSyncDateTime.HasValue || 
             BLastDateTime > BSyncDateTime 
             select new 
             { 
              Ordernumber = b.Field<int>("Ordernumber"), 
              Position = b.Field<string>("Position"), 
              Rate = b.Field<string>("Rate"), 
              WorkType = b.Field<string>("WorkType") 
             }).ToList(); 

Актерский исключение на этой конкретной линии:

let BLastDateTime = b.Field<string>("BLastDateTime") == null ? (DateTime?)null : DateTime.Parse(b.Field<string> 

Так потом я сделал некоторые исследования. Сначала я посмотрел, что был выходной VAR UpdatedBookedHourData как так:

var updatedBookedHourData3 = (from b in bookedHourList 
              select b).ToList(); 

это привело к ~ 400 записей, а также правильные datetime значения: 21-7-2015 15:32:22. Я также проверил запрос var на SQL-сервере, и там также получаю действительный вывод. Столбец BLastDateTime на сервере SQL перечисляет даты, указанные ниже: 2014-07-21 15:32:22 000 (не имеет значения, это имеет какое-либо влияние). Я также проверил datetype на SQL-сервере, и столбец имеет datetime2 в качестве своего типа.

Затем я попытался получить список на первое заявление так:

var updatedBookedHourData2 = (from b in bookedHourList 
             select new {test = b.Field<string>("BLastDateTime") }).ToList(); 

Это привело к тому же invalid cast exception (datetime to string). Между тем, в столбце BLastDateTime были найдены значения 0 NULL в базе данных SQL.

Потому что все это работало на творца его систему, которую я пытался сделать что-то с деталями культуры:

Я попытался все следующие:

let BLastDateTime = b.Field<string>("BLastDateTime") == null ? (DateTime?)null : DateTime.Parse(b.Field<string>("BLastDateTime"),CultureInfo.InvariantCulture) 

let BLastDateTime = b.Field<string>("BLastDateTime") == null ? (DateTime?)null : DateTime.Parse(b.Field<string>("BLastDateTime"),CultureInfo.CurrentCulture) 

let BLastDateTime = b.Field<string>("BLastDateTime") == null ? (DateTime?)null : DateTime.Parse(b.Field<string>("BLastDateTime"),CultureInfo.CreateSpecificCulture("en-US")) 

Все это привело к InvalidCastException.

Я сейчас из идей, возможно, кто-нибудь знает, где это происходит?

ответ

2

Это может быть DATE/DATETIME раздел в базе данных. Как и сообщение об ошибке, это проблема кастинга. Вы должны привести его к C# эквивалент System.DateTime вместо String

b.Field<System.DateTime>("BLastDateTime") 
+0

Это, кажется, сделать трюк и клещей в следующих строках. Следующий «BSyncDateTime» пропускается, но это возможно, потому что все эти значения имеют значение NULL.Может ли неправильный состав иметь какое-то отношение к предыдущей базе данных - Access, а не SQL (просто перенесли его из Access в SQL)? Думаю, я тоже могу исключить синтаксический разбор? Получил это так: «пусть BLastDateTime = b.Field (« BLastDateTime ») == null? (DateTime?) Null: b.Field («BLastDateTime») ' – Nicolas

+0

Просто изменил' BSyncDateTime' на ту же 'system.DateTime', но это не работает, когда есть значения« NULL » так как я получаю ошибку: 'Не могу вычислить DBNull.Value для типа System.DateTime. Используйте нулевой регулируемый тип'. – Nicolas

+0

Теперь это другая ошибка. Ваш C# поданный должен иметь значение NULL, чтобы назначить нулевое значение, или вы должны проверить значение null и заменить его чем-то другим. – Kaf