【发布时间】:2011-11-29 01:12:57
【问题描述】:
当我们可以使用简单的 SQL 语句直接与数据库通信时,我想了解数据集的用途。 另外,哪种方式更好?更新dataset中的数据,然后一次性传到数据库还是直接更新数据库?
【问题讨论】:
标签: c# winforms dataset sqldatasource
当我们可以使用简单的 SQL 语句直接与数据库通信时,我想了解数据集的用途。 另外,哪种方式更好?更新dataset中的数据,然后一次性传到数据库还是直接更新数据库?
【问题讨论】:
标签: c# winforms dataset sqldatasource
当我们可以使用简单的 SQL 语句直接与数据库通信时,我想了解数据集的用途。
为什么你的冰箱里有食物,而你每次想吃东西都可以直接去杂货店?因为每次想吃零食时都去杂货店非常不方便。
DataSet 的目的是避免使用简单的 SQL 语句直接与数据库通信。 DataSet 的目的是充当您关心的数据的廉价本地副本,这样您就不必继续对数据库进行昂贵的高延迟调用。他们让您一次开车去数据存储,拿起下周需要的所有东西,然后把它塞进厨房的冰箱里,以便在你需要的时候放在那里。
另外,哪种方式更好?更新数据集中的数据,然后立即将它们传输到数据库或直接更新数据库?
您从一个网站订购了十几种不同的产品。哪种方式更好:一旦从制造商那里获得物品,就一次交付一件,还是等到它们全部可用后再一次发货?第一种方式,你尽快拿到每件物品;第二种方式具有较低的交付成本。哪种方式更好?我们到底应该怎么知道?由您决定!
更好的数据更新策略是以更好地满足客户需求的方式做事的策略。您还没有告诉我们您的客户对“更好”的衡量标准是什么,因此无法回答这个问题。您的客户想要什么 - 最新的东西一上架,还是低运费?
【讨论】:
数据集支持断开连接的架构。您可以添加本地数据,从中删除,然后使用 SqlAdapter 您可以将所有内容提交到数据库。您甚至可以将 xml 文件直接加载到数据集中。这实际上取决于您的要求。您甚至可以在 DataSet 中设置表之间的内存关系。
顺便说一句,使用嵌入在应用程序中的直接 sql 查询是设计应用程序的一种非常糟糕和糟糕的方式。您的应用程序将容易出现“Sql 注入”。其次,如果您编写嵌入在应用程序中的查询,Sql Server 每次都必须执行它的执行计划,而存储过程是编译的,并且它的执行在编译时已经确定。随着数据变大,Sql server 也可以改变它的计划。您将因此获得性能提升。至少使用存储过程并验证其中的垃圾输入。它们天生就可以抵抗 Sql 注入。
存储过程和数据集是要走的路。
看这张图:
编辑:如果您使用 .Net 框架 3.5、4.0,您可以使用许多 ORM,例如 Entity Framework、NHibernate、Subsonic。 ORM 更真实地代表了您的业务模型。如果 ORM 不支持某些功能,您始终可以将存储过程与 ORM 一起使用。
例如:如果您正在编写递归 CTE(公用表表达式)存储过程非常有帮助。如果你使用实体框架,你会遇到太多问题。
【讨论】:
This page 详细解释了在哪些情况下应该使用Dataset 以及在哪些情况下可以直接访问数据库
【讨论】:
我通常喜欢这样练习,如果我需要对大量数据执行一系列分析过程,我将填充一个数据集(或数据表,具体取决于结构)。这样,它就是与数据库断开连接的模型。
但对于 DML 查询,我更喜欢直接对数据库进行快速点击(最好通过存储过程)。我发现这是最有效的,并且通过调整好的查询,它在数据库上一点也不差。
【讨论】: