SQL 批量复制覆盖数据类型

SQL Bulkcopy coverting data type

在我的 .Net 项目中,我正在加载一个 CSV 文件,这样我就可以获取该数据,用它做一些事情,然后将结果输出到一个 excel 文件中。

我通过代码中的数据 table 来处理这个问题。在我的结果文件中,我添加了一个我称之为 '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"];
}

一旦所有内容都被填充,它就会被发送到我的数据库,在那里我有一个 table,其中有一个名为“ResetDate”的列,其值再次为“DateTime” ,这一切都没有问题。

现在,当我尝试 运行 我的代码进行上述更改时,我收到以下错误消息:

Rows: 2-453 Error: The given value of type String from the data source cannot be converted to type int of the specified target column.

内部异常读作:

InvalidOperationException: The given value of type String from the data source cannot be converted to type datetime of the specified target column.

我尝试将我的代码修改为:

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 指定为新列的数据类型,如 link 中所述。您是否尝试过以下方法?

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