向不知道主键值的数据表添加数据
本文关键字:数据表 添加 数据 键值 不知道 | 更新日期: 2023-09-27 18:12:54
我用VB写了一个程序(虽然我对c#同样满意,所以请用任何一种语言回答),用于在我的SQL服务器DB中插入大量数据到表中。
我计划的方法是:
- 使用
SqlDataAdapter.FillSchema
方法从DB获取表的Schema。 - 添加多行数据到我的DataTable
- 使用
SqlBulkCopy
(.WriteToServer(dtToCopy.CreateDataReader)
)加载数据
我以前做过很多次,事实证明它非常有效。我的问题是,我写的表有一个自动递增的主键列,RowNum
。
现在我知道我可以在获得模式后重新查询我的表,并获得RowNum
的最新值,并简单地将这些值自己写入DataTable的相应列中,但我担心表可能在我查询和写入的时间之间发生变化,在这种情况下,我可能会得到不希望的结果。
我看过有关MissingSchemaAction
> AddWithKey
的帖子,但我不确定我该如何在我的情况下实现它?
我只是删除主键和删除RowNum
列从我的数据表吗?如果是,我在哪一点设置这个属性?它似乎不是数据表的属性,我不知道在哪里添加它在SqlBulkCopy。
谢谢! !
经过一番摸索,我自己找到了解决办法。
基本上,我必须:
- 设置我的DataTable的
- 从我的DataTable 中删除
- 使用
ColumnMappings
为我的SqlBulkCopy
,所以每一个其他列被映射和身份被忽略
PrimaryKey
属性为Nothing
RowNum
列然后,由于它是主键,并且在DB中设置为自动递增,因此在加载时将自动为其分配正确的值。
希望这对别人有帮助!!
主要来源:SqlBulkCopy Insert with Identity Column