[英]SQL Bulkcopy coverting data type
在我的.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
所有内容后,它将被发送到我的数据库,在该数据库中,我有一个表名为“ 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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.