数据集的目的是什么?

时间:2011-10-01 13:31:20

标签: c# winforms dataset sqldatasource

当我们可以使用简单的SQL语句直接与数据库通信时,我想了解数据集的用途。 另外,哪种方式更好?更新数据集中的数据,然后立即将它们传输到数据库或直接更新数据库?

4 个答案:

答案 0 :(得分:30)

  

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

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

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

  

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

您从网站订购了十几种不同的产品。哪种方式更好:一旦产品从制造商处获得,就可以一次交付,或者等到它们全部可用并一次性全部运送?第一种方式,你尽快得到每件物品;第二种方式有较低的运输成本。哪种方式更好?我们应该怎么知道?这取决于你决定!

更好的数据更新策略是以更好地满足客户需求的方式完成的事情。您还没有告诉我们您的客户“更好”的指标是什么,所以问题无法回答。您的客户想要什么 - 一旦有可用的最新资料,或者低运费?

答案 1 :(得分:11)

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

顺便说一句,使用嵌入在应用程序中的直接sql查询是一种非常糟糕且设计不佳的应用程序方式。您的应用程序将倾向于“Sql Injection”。其次,如果您编写嵌入在应用程序中的查询,Sql Server每次都必须执行它的执行计划,而存储过程是编译的,并且它的执行在编译时已经确定。当数据变大时,Sql server也可以改变它的计划。您将通过此获得性能提升。 Atleast使用存储过程并验证垃圾输入。它们固有地抵抗Sql注入。

存储过程和数据集是可行的方法。

见此图:

enter image description here

编辑:如果你进入.Net framework 3.5,4.0,你可以使用像Entity Framework,NHibernate,Subsonic这样的ORM。 ORM更真实地代表您的业务模式。如果ORM中不支持某些功能,则可以始终将存储过程与ORM一起使用。

对于Eg:如果您正在编写递归CTE(公用表表达式),则存储过程非常有用。如果您使用Entity Framework,则会遇到太多问题。

答案 2 :(得分:3)

This page详细说明了哪些情况下您应该使用Dataset,在哪些情况下您可以直接访问数据库

答案 3 :(得分:0)

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

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