SQL Bulkcopy转换数据类型

时间:2018-03-08 15:21:09

标签: c# sql-server parsing datetime sqlbulkcopy

在我的.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"]); 
}

但我得到同样的错误。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

只有列名的DataColumnCollection::Add()重载会将string指定为新列的数据类型,如该链接所述。您是否尝试过以下方法?

nettingTable.Columns.Add("resetdate", typeof(DateTime));