向不知道主键值的数据表添加数据

本文关键字:数据表 添加 数据 键值 不知道 | 更新日期: 2023-09-27 18:12:54

我用VB写了一个程序(虽然我对c#同样满意,所以请用任何一种语言回答),用于在我的SQL服务器DB中插入大量数据到表中。

我计划的方法是:

  1. 使用SqlDataAdapter.FillSchema方法从DB获取表的Schema。
  2. 添加多行数据到我的DataTable
  3. 使用SqlBulkCopy (.WriteToServer(dtToCopy.CreateDataReader))加载数据

我以前做过很多次,事实证明它非常有效。我的问题是,我写的表有一个自动递增的主键列,RowNum

现在我知道我可以在获得模式后重新查询我的表,并获得RowNum的最新值,并简单地将这些值自己写入DataTable的相应列中,但我担心表可能在我查询和写入的时间之间发生变化,在这种情况下,我可能会得到不希望的结果。

我看过有关MissingSchemaAction> AddWithKey的帖子,但我不确定我该如何在我的情况下实现它?

我只是删除主键和删除RowNum列从我的数据表吗?如果是,我在哪一点设置这个属性?它似乎不是数据表的属性,我不知道在哪里添加它在SqlBulkCopy。

谢谢! !

向不知道主键值的数据表添加数据

经过一番摸索,我自己找到了解决办法。

基本上,我必须:

    设置我的DataTable的PrimaryKey属性为Nothing
  1. 从我的DataTable
  2. 中删除RowNum
  3. 使用ColumnMappings为我的SqlBulkCopy,所以每一个其他列被映射和身份被忽略

然后,由于它是主键,并且在DB中设置为自动递增,因此在加载时将自动为其分配正确的值。

希望这对别人有帮助!!

主要来源:SqlBulkCopy Insert with Identity Column