【发布时间】:2014-09-04 12:45:15
【问题描述】:
我用 VB 编写了一个程序(虽然我对 C# 也同样熟悉,所以请用任何一种语言回答),用于将大量数据插入到我的 SQL 服务器数据库中的表中。
我打算这样做的方式是:
- 使用
SqlDataAdapter.FillSchema方法从数据库中获取表的架构。 - 将多行数据添加到我的 DataTable 中
- 使用
SqlBulkCopy(.WriteToServer(dtToCopy.CreateDataReader)) 加载数据
我之前已经做过很多次了,事实证明它非常有效。我的问题是我要写入的表有一个自动递增的主键列RowNum。
现在我知道我可以在获取架构后重新查询我的表并获得RowNum 的最新值,然后只需将值自己写入我的 DataTable 的相应列中,但我担心表可能会改变在我的查询时间和我的写作时间之间,在这种情况下,我可能会得到不理想的结果。
我看过与MissingSchemaAction > AddWithKey 相关的帖子,但我不确定在我的情况下如何实现它?
我是否只需删除主键并从我的 DataTable 中删除 RowNum 列?
如果是这样,我应该在什么时候设置该属性?它似乎不是 DataTable 的属性,我看不到在 SqlBulkCopy 中添加它的位置。
谢谢!!!
【问题讨论】:
-
您的 DataTable 当前是否有该 RowNum 列,如果有,是否有“默认”值或“可用”值?
-
@BernhardHiller,它使用
FillSchema命令从数据库中获取列,但它没有获取种子值... -
为大量数据创建数据表效率低下。假设您有 1000 万条记录,您不想将它们全部加载到内存中。您可能需要考虑使用数据阅读器:msdn.microsoft.com/en-us/library/434atets(v=vs.110).aspx
-
谢谢@Neolisk,我也有这个程序。不过,对于这个特定的示例,我喜欢 DataTable,因为我还对它执行 Linq 查询并在我的其他地方的代码中使用它,但这是一个非常有用且合乎逻辑的建议。谢谢!
-
你可以使用 Linq-To-Sql。
标签: c# sql-server vb.net datatable