В моем проекте .Net я загружаю файл CSV, поэтому я могу взять эти данные, сделать с ним кое-что, а также запустить результаты в файл excel.
Я обрабатываю это через таблицу данных внутри моего кода. В моем файле результатов я добавил новый столбец, который я называю «resetdate», и я делаю это следующим образом:
nettingTable.Columns.Add("resetdate");
Данные очищаются от любых пустых ячеек и значения, установленного в DBNull
так что моя база данных не проходит через ошибку. Этот код выглядит следующим образом:
public DataTable PreProcess(DataTable dt)
{
foreach (DataColumn col in dt.Columns)
if (_config.ColumnNames.Contains(col.ColumnName))
{
foreach (DataRow row in col.Table.Rows)
{
// We only care about the date
// This trims out the any time values that may have automatically been added
if(row[col].ToString().Length > 10)
{
row[col] = row[col].ToString().Substring(0, 10);
}
if (row[col].ToString().Length == 0)
{
row[col] = DBNull.Value;
}
}
}
return dt;
}
Здесь ничего не сломалось, и это уже давно сработало. Тем не менее, мой новый столбец resetdate
предназначен для заполнения из столбца в моем CSV-файле с именем nextresetdate
который я делаю со следующим кодом:
foreach (DataRow dr in nettingTable.Rows)
{
dr["resetdate"] = dr["nextresetdate"];
}
После того, как все было заполнено, оно отправляется в мою базу данных, где у меня есть таблица с столбцом « ResetDate
», значение которой имеет значение « DateTime
». Снова все это работало без проблем.
Теперь, когда я пытаюсь запустить свой код с указанными выше изменениями, появляется следующее сообщение об ошибке:
Строки: 2-453 Ошибка: заданное значение типа String из источника данных не может быть преобразовано в тип int указанного столбца цели.
Внутреннее исключение читается как:
InvalidOperationException: данное значение типа String из источника данных не может быть преобразовано в тип datetime указанного целевого столбца.
Я пробовал поменять свой код на что-то вроде:
foreach (DataRow dr in nettingTable.Rows)
{
// this was done both as I've wrote and passing
// in the intended value as a variable, same result
dr["resetdate"] = DateTime.Parse(dr["nextresetdate"]);
}
Но я получаю ту же ошибку. Что я здесь делаю неправильно?
Перегрузка DataColumnCollection::Add()
которая принимает только имя столбца, присваивает string
как тип данных для нового столбца, как описано в этой ссылке. Вы попробовали следующее вместо этого?
nettingTable.Columns.Add("resetdate", typeof(DateTime));