【发布时间】:2017-02-27 16:52:35
【问题描述】:
我将文件数据读入数据集,并尝试通过映射列使用 SQL 批量复制进行批量插入。我在数据库中的所有列名都是从我的代码创建的小写。
我不确定为什么会出现“数据库中不存在指定的列”异常。虽然我看到了大容量复制对象中映射的所有列。请指教。
public static void BatchBulkCopy(DataTable dataTable, string DestinationTbl, List<string> columnMapping,string filename)
{
// Get the DataTable
DataTable dtInsertRows = dataTable;
using (SqlBulkCopy sbc = new SqlBulkCopy(program.connectionStr.ToString()))
{
try
{
foreach (DataColumn col in dataTable.Columns)
{
sbc.ColumnMappings.Add(col.ColumnName.ToLower(), col.ColumnName.ToLower());
// Console.WriteLine("ok\n");
}
sbc.DestinationTableName = DestinationTbl.ToLower();
sbc.BulkCopyTimeout = 8000;
sbc.DestinationTableName = "["+ DestinationTbl.ToLower() + "]";
sbc.WriteToServer(dtInsertRows);
sbc.Close();
}
catch (Exception ex)
{
}
}
}
【问题讨论】:
-
你能添加你的表定义/
dataTable.Column的所有值吗? -
您确定没有大小写问题吗?为什么要在源表上调用 toLower?映射应该在两边都完全匹配大小写。 stackoverflow.com/questions/438587/sqlbulkcopy-not-working
-
我的数据表有来自 excel 文件的列数据,我首先从我的代码中在数据库中创建了一个包含所有小写列的表。所以它们应该匹配..有人可以提供一个示例吗,不确定我在哪里做错了..
标签: c# sql sqlbulkcopy columnmappings