繁体   English   中英

SQL大容量复制掩盖数据类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM