向DataTable添加数据不知道主键值

时间:2014-07-14 14:46:58

标签: c# sql-server vb.net datatable

我在VB中编写了一个程序(尽管我对C#也很满意,所以请用任何一种语言回答)用于将大量数据插入到我的SQL Server DB中的表中。

我计划这样做的方式是:

  1. 使用SqlDataAdapter.FillSchema方法从数据库中获取表格的模式。
  2. 将多行数据添加到我的DataTable
  3. 使用SqlBulkCopy.WriteToServer(dtToCopy.CreateDataReader))加载数据
  4. 我以前做了很多次,事实证明它很有效率。我的问题是我写的表有一个自动递增的主键列RowNum

    现在我知道在获取架构并获取RowNum的最新值后我可以重新查询我的表,只需将值自己写入我的​​DataTable中的相应列,但我担心的是表格可能会在我的查询时间和写作时间之间发生变化,在这种情况下,我可能会产生不理想的结果。

    我看过有关MissingSchemaAction>的帖子AddWithKey,但我不确定如何在我的案例中实现它?

    我是否只需删除主键并从DataTable中删除RowNum列? 如果是这样,我在什么时候设置该属性?它似乎不是DataTable的属性,我没有看到在SqlBulkCopy中添加它的位置。

    感谢!!!

1 个答案:

答案 0 :(得分:1)

经过大量的搜索,我自己找到了解决方案。

基本上,我必须:

  1. 将我的DataTable的PrimaryKey属性设置为Nothing
  2. 从我的DataTable中删除RowNum
  3. 对我的ColumnMappings使用SqlBulkCopy,以便映射每个其他列,并且遗漏身份
  4. 然后,由于它是主键并在DB中设置为自动增量,因此在加载时会自动为其分配正确的值。

    希望这有助于其他人!!!

    主要来源: SqlBulkCopy Insert with Identity Column