我有一个带有两个TableAdapter(1对多关系)的DataSet,它是使用visual studio 2010的配置向导创建的。
我调用外部源并使用结果填充Dictionary。这些结果应该是数据库中的所有条目。要同步数据库,我不想只清除所有表,然后重新填充它们,比如删除表并在sql中使用新数据创建它们。
是否有一种干净的方式可能使用TableAdapter.Fill()方法或者我必须逐行遍历这两个表并确定它是保留还是被删除然后添加新条目?使字典中的数据成为我使用DataSet的两个表中的唯一数据的最佳方法是什么?
答案 0 :(得分:0)
第一个问题:如果它是相同的数据库,为什么你有2个表具有相同的信息?
对于手头的问题:大腿取决于尺寸。如果表不大,那么使用事务,清除表(DELETE * FROM TABLE或其他)并再次在那里写入数据。 另一方面,如果表格很大,问题是:你能将所有这些加载到字典中吗?
当然,您必须问自己,不一致的数据会发生什么变化(另一个用户/应用程序在您的字典中更改数据时)。
如果这需要很长时间,您可以记住您对数据所做的操作 - 这意味着:标记已更改的数据并记住已删除的密钥和新插入的行,并根据该更新进行更新。
两者都可以通过记住Filled DataTable并将其用作支持字段或实现自己的机制来实现。
无论如何,我建议考虑问题:你真的需要字典吗?为什么不对数据库进行查询以获取数据?或者只缓存部分数据以便快速访问?
PS:DataAdapter上的更新方法将完成所有工作(更改已更改,删除已删除并插入新数据行,但它将更新DataTable / Set,因此这只能工作一次)
答案 1 :(得分:0)
重新填充整个表格的速度可能比通过整个表格更快,并决定记录/停留的记录。你能否决定是否通过sql语句删除记录? (如果您希望它们保留在数据库中而不是数据集中,则从active = false的表中删除)(select * from table where active = true)
您可以拥有一个日期字段,并选择自您迟迟“汇总”数据库以来添加的所有记录(从表中选择*,其中active = true,添加日期>#12:30#)