Итак, у меня есть интересное задание проверить кого-то еще его код и сразу же наткнулся на проблему при попытке запустить веб-приложение. Когда я нажимаю на определенную кнопку, я получаю 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
.
Я сейчас из идей, возможно, кто-нибудь знает, где это происходит?
Это, кажется, сделать трюк и клещей в следующих строках. Следующий «BSyncDateTime» пропускается, но это возможно, потому что все эти значения имеют значение NULL.Может ли неправильный состав иметь какое-то отношение к предыдущей базе данных - Access, а не SQL (просто перенесли его из Access в SQL)? Думаю, я тоже могу исключить синтаксический разбор? Получил это так: «пусть BLastDateTime = b.Field (« BLastDateTime ») == null? (DateTime?) Null: b.Field («BLastDateTime») ' –
Nicolas
Просто изменил' BSyncDateTime' на ту же 'system.DateTime', но это не работает, когда есть значения« NULL » так как я получаю ошибку: 'Не могу вычислить DBNull.Value для типа System.DateTime. Используйте нулевой регулируемый тип'. – Nicolas
Теперь это другая ошибка. Ваш C# поданный должен иметь значение NULL, чтобы назначить нулевое значение, или вы должны проверить значение null и заменить его чем-то другим. – Kaf