У меня есть небольшое консольное приложение, которое должно импортировать файл CSV в базу данных. Это в. NET ЯДЕР 3.1. CSV-файл импортируется без проблем. Проблема возникает при попытке сохранить данные в таблицу. Получается ошибка: «Строковые или двоичные данные будут усечены. Оператор завершен». Получено во время звонка context.SaveChanges()
. Чтобы точно определить, в чем заключается ошибка, загрузите Profiler, чтобы увидеть оскорбительный оператор. Оскорбительный фрагмент кода был связан с полем, содержащим дату и время. Чтобы начать с начала и привести к проблеме.
Импортированные данные находятся в столбце и представлены следующим образом:
"20200404121655500"
"20200404121755500"
Свойство модели импорта определяется следующим образом:
public string Date_And_Time { get; set; }
Свойство модели данных определяется следующим образом:
[Column(TypeName = "DATETIME2(7)")]
public DateTime? Date_And_Time { get; set; }
Преобразование, используемое для получения импортированной строки в поле модели данных, выглядит следующим образом:
if (DateTime.TryParseExact(Date_And_Time.Trim()
.PadRight(21, '0')
.Substring(0, 21), "yyyyMMddHHmmssFFFFFFF", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime newDateTime))
{ model.Date_And_Time = newDateTime; }
else { model.Date_And_Time = null; }
Во время отладки, когда обрабатываются 2 разные даты, они устанавливаются в model.Date_And_Time
, как и ожидалось. Объект расширяется, производя всю правильную информацию (год, день, час и т. Д. c.). Перед выполнением SaveChanges
проверка объектов показывает, что они оба имеют правильные DateTime
объекты. Однако после выполнения этой команды выдается указанное выше исключение SQL. При проверке команды объединения, созданной EF, даты по-разному форматируются. Они следующие:
'2020-04-0412:16:55.5000000' and '2020-04-04 12:17:55.5000000'
У первого нет пробела между датой и временем, тогда как у второго есть пробел. Первое - это то, что вызывает исключение. При выполнении SaveChanges
в среднем сохраняется 20 записей, и у некоторых есть место, а у некоторых нет, я не могу найти шаблон. Я пытался использовать точно такую же дату и время, а также с некоторыми без пробела.