【问题标题】:What's the purpose of Datasets?数据集的目的是什么?
【发布时间】:2011-11-29 01:12:57
【问题描述】:

当我们可以使用简单的 SQL 语句直接与数据库通信时,我想了解数据集的用途。 另外,哪种方式更好?更新dataset中的数据,然后一次性传到数据库还是直接更新数据库?

【问题讨论】:

    标签: c# winforms dataset sqldatasource


    【解决方案1】:

    当我们可以使用简单的 SQL 语句直接与数据库通信时,我想了解数据集的用途。

    为什么你的冰箱里有食物,而你每次想吃东西都可以直接去杂货店?因为每次想吃零食时都去杂货店非常不方便

    DataSet 的目的是避免使用简单的 SQL 语句直接与数据库通信。 DataSet 的目的是充当您关心的数据的廉价本地副本,这样您就不必继续对数据库进行昂贵的高延迟调用。他们让您一次开车去数据存储,拿起下周需要的所有东西,然后把它塞进厨房的冰箱里,以便在你需要的时候放在那里。

    另外,哪种方式更好?更新数据集中的数据,然后立即将它们传输到数据库或直接更新数据库?

    您从一个网站订购了十几种不同的产品。哪种方式更好:一旦从制造商那里获得物品,就一次交付一件,还是等到它们全部可用后再一次发货?第一种方式,你尽快拿到每件物品;第二种方式具有较低的交付成本。哪种方式更好?我们到底应该怎么知道?由您决定!

    更好的数据更新策略是以更好地满足客户需求的方式做事的策略。您还没有告诉我们您的客户对“更好”的衡量标准是什么,因此无法回答这个问题。您的客户想要什么 - 最新的东西一上架,还是低运费?

    【讨论】:

    • 顺便说一句,没有客户。就我自己。这只是我为练习而做的一个库存管理系统。由于数据被反复用于查看和更新​​,我猜数据集就是答案。但是,仍然存在这样的问题,即在系统发生故障的情况下,用户所做的所有工作都会丢失,除非用户所做的每一次更新都更新数据库。是否可以使用数据集来防止这种情况发生?
    • @Lizzie:这是一个很好的新问题候选人。
    【解决方案2】:

    数据集支持断开连接的架构。您可以添加本地数据,从中删除,然后使用 SqlAdapter 您可以将所有内容提交到数据库。您甚至可以将 xml 文件直接加载到数据集中。这实际上取决于您的要求。您甚至可以在 DataSet 中设置表之间的内存关系。

    顺便说一句,使用嵌入在应用程序中的直接 sql 查询是设计应用程序的一种非常糟糕和糟糕的方式。您的应用程序将容易出现“Sql 注入”。其次,如果您编写嵌入在应用程序中的查询,Sql Server 每次都必须执行它的执行计划,而存储过程是编译的,并且它的执行在编译时已经确定。随着数据变大,Sql server 也可以改变它的计划。您将因此获得性能提升。至少使用存储过程并验证其中的垃圾输入。它们天生就可以抵抗 Sql 注入。

    存储过程和数据集是要走的路。

    看这张图:

    编辑:如果您使用 .Net 框架 3.5、4.0,您可以使用许多 ORM,例如 Entity Framework、NHibernate、Subsonic。 ORM 更真实地代表了您的业务模型。如果 ORM 不支持某些功能,您始终可以将存储过程与 ORM 一起使用。

    例如:如果您正在编写递归 CTE(公用表表达式)存储过程非常有帮助。如果你使用实体框架,你会遇到太多问题。

    【讨论】:

    • 我不同意 - 我会说使用对象关系映射器(如 Entity Framework,它也很好地支持存储过程)将您的关系数据转换为适当的对象是要走的路.. ...
    • @marc_s:我也同意。但是这个问题是关于 .Net 框架 2.0 的,当我说“存储过程和数据集”时,我的意思是它们是 Ado.Net 以及良好的旧 SqlHelper 类的方法。
    【解决方案3】:

    This page 详细解释了在哪些情况下应该使用Dataset 以及在哪些情况下可以直接访问数据库

    【讨论】:

      【解决方案4】:

      我通常喜欢这样练习,如果我需要对大量数据执行一系列分析过程,我将填充一个数据集(或数据表,具体取决于结构)。这样,它就是与数据库断开连接的模型。

      但对于 DML 查询,我更喜欢直接对数据库进行快速点击(最好通过存储过程)。我发现这是最有效的,并且通过调整好的查询,它在数据库上一点也不差。

      【讨论】:

        猜你喜欢
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-21
        • 2012-09-30
        • 2016-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多