通过动态映射列来进行SQL批量复制

时间:2017-02-27 16:52:36

标签: c# sql sqlbulkcopy columnmappings

我将文件数据读入数据集,并尝试通过映射列来使用SQL批量复制批量插入。我在数据库中的所有列名都是小写的,这是从我的代码创建的。

我不知道为什么会得到"指定的列不存在于数据库中#34;例外。虽然我看到批量复制对象中映射的所有列。请指教。

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)
        {           

        }      
    }
}

1 个答案:

答案 0 :(得分:1)

您尚未打开数据库连接。插入sbc.Open();在sbc.WriteToServer(dtInsertRows)之前;