BulkCopy WriteToServer()插入错误的列

时间:2015-01-23 13:29:47

标签: c# sql sql-server datatable sqlbulkcopy

我正在尝试将DataTable写入我在Sql Server上的目标表中。 DataTable dt仅包含一列,其名称为Email。我的目标表包含tpidlastnameagedateemail。 这是我用于批量复制的代码:

using (SqlConnection sqlConn = new SqlConnection(sqlCs))
{
    sqlConn.Open();
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn.ConnectionString, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.UseInternalTransaction))
    {
        bulkCopy.DestinationTableName = destinationTableName;
        bulkCopy.WriteToServer(dt);
    }
}

我看到的是,在我的目标表中,我将DataTable中的电子邮件值插入tpid列,而不是email。我这里没有使用列映射,但是不应该自动批量复制电子邮件电子邮件吗?

2 个答案:

答案 0 :(得分:6)

考虑尝试这种映射:

SqlBulkCopyColumnMapping mapMAIL = new SqlBulkCopyColumnMapping("Email", "email");
bulkCopy.ColumnMappings.Add(mapMAIL);

如果需要,您可以查询源模式和目标表的MySQL模式,并根据字段名称生成自动化。

答案 1 :(得分:1)

没有它赢得比赛。你必须添加映射:

 myBulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Email", "email"));

或源和目标具有相同顺序的相同列。如果你需要更多的灵活性,我建议实现一个IDataReader并将其传递给WriteToServer方法。