【问题标题】:DataSet TableAdapter Fill MethodDataSet TableAdapter 填充方法
【发布时间】:2011-11-19 04:02:15
【问题描述】:

我有一个带有两个 TableAdapter(一对多关系)的 DataSet,它是使用 Visual Studio 2010 的配置向导创建的。

我调用外部源并用结果填充字典。这些结果应该是数据库中的所有条目。要同步数据库,我不想只清除所有表,然后像删除表并使用 sql 中的新数据创建它们一样重新填充它们。

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

【问题讨论】:

    标签: c# .net sql dataset


    【解决方案1】:

    第一个问题:如果是同一个数据库,为什么会有 2 个信息相同的表?

    对于手头的问题:largley 取决于尺寸。如果表不大,则使用事务,清除表(DELETE * FROM TABLE 或其他)并再次将数据写入其中。 另一方面,如果表格很大,问题是:您可以将所有这些都加载到您的字典中吗?

    当然,您必须问问自己,不一致的数据会发生什么(当您的字典中有数据时,另一个用户/应用更改了数据)。

    如果这需要很长时间,您可以记住您对数据所做的操作 - 这意味着:标记更改的数据并记住已删除的键和新插入的行,并根据这些进行更新。

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

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

    PS:DataAdapter 上的更新方法将完成所有工作(更改已更改、删除已删除并插入新数据行,但它会更新 DataTable/Set,因此这只工作一次)

    【讨论】:

    • 我只能访问我正在修改的数据库。另一个数据库位于活动目录中的某个位置,我只能通过 System.DirectoryServices api 访问,因此我将结果存储在哈希数据结构中。如果我只能访问DataSet,有没有办法直接使用sql?
    • 您可以写入 AD 数据库吗?如果是这样,为什么要使用您的 onw 数据库(性能?)也许您可以找到与 AD 的数据库专家合作的方法?
    • 我只能阅读 AD。我的老板要求我使用自己的数据库,主要是因为性能。它是存储在 AD 中的数据的一小部分,但我不想写入它,因为 AD 就像主数据库,我正在模仿它的一小部分。
    • 好吧,你不能保持数据同步 - 只需复制一次数据并仅使用你自己的数据库 - 采用 Linq2Sql 或 DataSet 方法,这是最简单的方法......
    • 每天只会与 DataSet 同步几次。我正在寻找有关填充方法如何工作或替换表中所有数据的最佳方法的更多信息。
    【解决方案2】:

    可能是重新填充整个表比遍历并决定哪些记录去/留更快。你能不做决定是否通过 sql 语句删除记录的过程吗? (从 active = false 的表中删除)如果您希望它们留在数据库中而不是数据集中(从 table where active = true 中选择 *)

    您可以有一个日期字段并选择自您延迟“合并”数据库之日起添加的所有记录(select * from table where active = true and date- added > #12:30#)

    【讨论】:

    • 我在想用 DataTable 和 DataRow 类创建一个新表然后将其传递给 Fill 方法可能更容易?我一直在想一个 sql 语句可以为我做这件事,但它会比查看活动列更复杂。我有一个组表,然后是一个成员表,其中包含他们所属组的 fk。
    • @Ben SQL 是一种强大的数据操作语言,您可以轻松地从选定字段创建临时表,甚至将其他表附加到另一个...也许您需要退后一步看看更大的图景?
    • 希望我能……老板和其他团队成员要求我这样做。
    猜你喜欢
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2019-12-25
    相关资源
    最近更新 更多