【问题标题】:SQL Bulk Copy by mapping columns dynamically通过动态映射列的 SQL 大容量复制
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2016-05-28
    相关资源
    最近更新 更多