我正在尝试将DataTable
写入我在Sql Server上的目标表中。 DataTable dt
仅包含一列,其名称为Email
。我的目标表包含tpid
,lastname
,age
,date
和email
。
这是我用于批量复制的代码:
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
。我这里没有使用列映射,但是不应该自动批量复制电子邮件与电子邮件吗?
答案 0 :(得分:6)
考虑尝试这种映射:
SqlBulkCopyColumnMapping mapMAIL = new SqlBulkCopyColumnMapping("Email", "email");
bulkCopy.ColumnMappings.Add(mapMAIL);
如果需要,您可以查询源模式和目标表的MySQL模式,并根据字段名称生成自动化。
答案 1 :(得分:1)
没有它赢得比赛。你必须添加映射:
myBulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Email", "email"));
或源和目标具有相同顺序的相同列。如果你需要更多的灵活性,我建议实现一个IDataReader并将其传递给WriteToServer方法。