【发布时间】:2015-03-04 13:48:20
【问题描述】:
我正在尝试将 CSV 文件批量插入 SQL Server 数据库。
过程是.CSV文件到DataTable到SqlBulkCopy到SQL Server。
当我运行它时,我得到了这个错误:
给定的 ColumnMapping 与源或目标中的任何列都不匹配
当我通过 Management Studio 直接将 CSV 导入 SQL Server 时,它可以工作!所以我认为问题是我的数据表转换?
这是我从.CSV 到DataTable 的代码:
public DataTable CsvFileToDataTable(string filePath)
{
var csvData = new DataTable("Table1");
using (var csvReader = new TextFieldParser(filePath))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
var readFields = csvReader.ReadFields();
foreach (var dataColumn in readFields.Select(column => new DataColumn(column) {AllowDBNull = true }))
{
csvData.Columns.Add(dataColumn);
}
while (!csvReader.EndOfData)
{
var data = csvReader.ReadFields();
for (var i = 0; i < data.Length; i++)
{
if (data[i] == "")
{
data[i] = null;
}
}
csvData.Rows.Add(data);
}
}
return csvData;
}
这里是批量复制插入的代码:
public void InsertData(DataTable table)
{
using (var transactionScope = new TransactionScope())
{
using (var sqlConnection = new SqlConnection(this.ConnectionString))
{
sqlConnection.Open();
using (var sqlBulkCopy = new SqlBulkCopy(sqlConnection))
{
sqlBulkCopy.DestinationTableName = table.TableName;
foreach (var column in table.Columns)
{
sqlBulkCopy.ColumnMappings.Add(column.ToString(), column.ToString());
}
sqlBulkCopy.WriteToServer(table);
}
transactionScope.Complete();
}
}
}
有人有什么建议吗?
谢谢
【问题讨论】:
-
看起来应该可以正常工作。在你的 sql 表上是否有任何标识列?
标签: c# sql-server datatable sqlbulkcopy csv-import