DataSet TableAdapter填充方法

本文关键字:方法 填充 TableAdapter DataSet | 更新日期: 2023-09-27 18:09:05

我有一个使用visual studio 2010的配置向导创建的具有两个TableAdapters(1到许多关系)的数据集。

我调用外部源并将结果填充到Dictionary中。这些结果应该是数据库中的所有条目。为了同步数据库,我不希望只是清除所有的表,然后重新填充它们,就像删除表并在sql中创建新数据一样。

是否有一个干净的方式可能使用TableAdapter.Fill()方法,或者我必须通过两个表逐行循环,并决定它是否保留或被删除,然后添加新的条目?使字典中的数据成为具有DataSet的两个表中唯一的数据的最佳方法是什么?

DataSet TableAdapter填充方法

第一个问题:如果它是相同的DB,为什么你有2个表具有相同的信息?

对于眼前的问题:这在很大程度上取决于尺寸。如果表不是很大,那么使用事务,清除表(DELETE * FROM table或其他)并再次将数据写入其中。另一方面,如果表很大,问题是:你能把这些都装进字典吗?

当然,你必须问自己不一致的数据会发生什么(另一个用户/应用程序改变了数据,而你有它在你的字典)。

如果这需要很长时间,你可以记住你对数据做了什么-这意味着:标记更改的数据,记住删除的键和新插入的行,并基于此进行更新。

这两者都可以通过记住填充数据表并将其用作支持字段或通过实现您自己的机制来实现。

无论如何,我建议你思考一下这个问题:你真的需要字典吗?为什么不对数据库进行查询以获取数据呢?还是只缓存一部分数据以便快速访问?

PS:数据适配器上的更新方法将完成所有的工作(更改已更改的,删除已删除的和插入新的数据,但它会更新数据表/集,所以这将只工作一次)

重新填充整个表可能比遍历并决定哪些记录要快。你可以不做决定,如果记录是通过sql语句删除的过程?(删除active = false的表)如果你想让他们留在数据库中,而不是在数据集中(select * from table where active = true)

你可以有一个日期字段,并选择所有已添加的记录,因为你已经'池'数据库的日期(select * from table where active = true and date-added> #12:30#)