主键无效的批量复制

时间:2014-11-21 11:56:15

标签: c# sql datatable sqlbulkcopy

我有一个数据库表,包含列和一个priamary键。

我想从c#中的数据表中进行批量复制。

当我的表中有主键时,我得到了异常,因为该表有6列,而我的数据表只有5列。

我该怎么办?

我应该在c#中添加主键到我的数据表吗?

(如果您需要任何代码告诉我请求)

这是数据表

private DataTable getBasicDataTable()
        {
            DataTable dataTable = new DataTable();
            dataTable.Clear();
            dataTable.Columns.Add("customerID", typeof(int));
            dataTable.Columns.Add("firstName", typeof(string));
            dataTable.Columns.Add("lastName", typeof(string));
            dataTable.Columns.Add("showsNumber", typeof(int));
            dataTable.Columns.Add("visitNumber", typeof(int));
            dataTable.Columns.Add("cancellation", typeof(int));
            return dataTable;
        }

但在我的数据库表中,我有完全相同的列,但有额外的ID主键,

注意

当我删除数据库中的主键时,一切都运行良好

2 个答案:

答案 0 :(得分:2)

使用SqlBulkCopy.ColumnMappings

  

列映射定义数据源中列与目标列之间的关系。

     

...

     

如果数据源和目标表具有相同的列数,并且数据源中每个源列的序号位置与相应目标列的序号位置匹配,则不需要ColumnMappings集合。但是,如果列数不同,或者序数位置不一致,则必须使用ColumnMappings确保将数据复制到正确的列中。

请参阅SqlBulkCopyColumnMapping上的示例了解如何使用它。

答案 1 :(得分:2)

我自己找到了解决方案

bc.ColumnMappings.Add("customerID", "customerID");
                sbc.ColumnMappings.Add("firstName", "firstName");
                sbc.ColumnMappings.Add("lastName", "lastName");
                sbc.ColumnMappings.Add("showsNumber", "showsNumber");
                sbc.ColumnMappings.Add("visitNumber", "visitNumber");
                sbc.ColumnMappings.Add("cancellation", "cancellation");