在我的.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"]);
}
但我得到同样的错误。我在这里做错了什么?
答案 0 :(得分:0)
只有列名的DataColumnCollection::Add()
重载会将string
指定为新列的数据类型,如该链接所述。您是否尝试过以下方法?
nettingTable.Columns.Add("resetdate", typeof(DateTime));