2

我对 C# 中的数据集概念有点困惑(编码 ASP.NET 站点,这并不重要)。在我的阅读中,我理解它们(基本上)用作我的应用程序和我的数据(或数据库)之间的接口。我明白了。我不明白的是,有些文章将数据集称为“离线存储”,其中更新(插入等)被批量应用或从不应用,而其他文章则更多地涉及“接口”方面,即读取和更新(插入等...)立即应用于下划线数据库。

有人可以用简单的术语解释数据集吗?我真的想使用它们吗?也许一些简短的例子可能会让我明白。否则,我不明白为什么我不能只创建一个从我的数据库中选择、插入、更新的简单类,我为什么要关心一些 XML 层?

你的智慧值得赞赏。

4

5 回答 5

6

它是一个工具,它有一些方便的功能——有时它们很好,但坦率地说,我个人很少使用它们——通常更喜欢简单的 POCO,比如 dapper(或者你自己喜欢的 ORM / micro-ORM——随便)。

DataSet/有用的主要时间DataTable是,如果您正在创建本身是动态的东西- 例如,像Stack Exchange Data Explorer - 基本上是用户定义的模式返回的工具。

在大多数业务线软件中,情况并非如此DataTable——IMO 也不是首选工具。

于 2013-09-03T19:13:48.077 回答
3

从一个角度来看,DataSet 是一个内存数据库。DataSet 对象当然有它的用途,可以用来提高性能、使某些任务变得更简单等。是否使用它取决于具体情况。它是一种在某些情况下运行良好的工具,但在其他情况下却不如替代方案。

DataSet 会大幅提高性能的一个示例是在您需要对一组数据进行多次计算的情况下。I/O 仍然是性能的主要瓶颈,在这种情况下,将数据集加载到内存中,并使用DataTable.Compute执行 Sum()、Avg() 等函数在性能方面远优于执行针对真实数据库的多个类似语句,每次计算都需要往返数据库服务器。

这只是一种情况。在现实生活中的应用程序中,我必须修改以前的开发人员编写的程序,该程序连接到 Sybase SQL Anywhere 函数以对销售数据集执行多项计算。

我将其重构为一次加载数据并在内存中进行所有计算。我根本无法保证这种类型的性能提升,但该程序从字面上需要超过 24 小时来执行一批计算到不到 5 分钟。

于 2013-09-03T19:12:54.710 回答
2

您可以使用像NHibernateEntity Framework这样的ORM 工具。使用这种方法,您只需将您的域对象(例如:或)发送到 ORM 工具的某些对象,它将保存在数据库中给您。您无需编写 SQL 命令即可完成,ORM 工具为您轻松完成。使用 ORM,您只需将域对象映射到一个类中,它就会在数据库上为您管理,就像这个 imagem(我知道它在 java 中,但 ORM 工具的概念是相同的):CustomerProduct

在此处输入图像描述

另一方面,您在内部有 ADO.NET,您可以编写它,您需要编写一些代码,但这并不难。

在 .net 上不使用 Dataset 的原因有很多,请看这篇文章: http ://www.4guysfromrolla.com/articles/050405-1.aspx

于 2013-09-03T19:15:18.203 回答
1

我不会使用DataSet. 一般来说,我处理 POCO(普通旧 CLR 对象)并使用像Dapper这样的库来处理数据库中的SELECTINSERTUPDATEDELETE数据。只使用一个模仿我的数据库的基本对象(如果你愿意的话,一个域模型)并做我需要的事情要容易得多。

Dapper 的网站上有许多示例向您展示如何将 POCO 与 Dapper 一起使用。

对于简单的项目,我只是利用标准对象之外的ADO.NET 特性(例如ExecuteNonQueryExecuteScalar、 )。这也不需要.ExecuteReaderSqlCommandDataSet

于 2013-09-03T19:08:30.960 回答
0

一个简单的答案是

数据集是断开连接的,因此意味着您在内存中有一个类似表的结构。

于 2013-09-03T19:12:25.037 回答