为什么我们仍然在.NET中使用DataSet?

时间:2009-02-16 05:58:01

标签: .net orm dataset

DataSet是.NET 1.0中最重要的东西之一,甚至现在使用.NET 3.5时我仍然发现自己必须使用它们....特别是当我必须调用存储过程,它返回一个数据集然后我最终必须手动转换为对象,以便更容易使用。

我从来没有真正喜欢过DataSet,并且发现它们很难使用...因此我倾向于将我对它们的了解保持在最低限度(可能是非常糟糕的事情!)。我也喜欢将它们快速转换为对象或对象列表,这样我就可以在代码中轻松操作它们。

DataSet是否按日期传递使用?随着像NHibernate这样的O / R映射器的出现,我想知道DataSet会不会消亡或者还有它们的位置?目前,我不知道是否应该留出时间重新访问DataSet并学习如何正确使用它们,或者100%完成O / R映射器,并且完全抛弃DataSet。

DataSet是否提供NHibernate和LINQ等技术无法提供的功能?如果没有,为什么我们仍然使用它们?

9 个答案:

答案 0 :(得分:9)

无论好坏,答案都是简单。当2.0 Framework出现并且TableAdapter被包含在这个过程中时,获得基本的CRUD类型应用程序,甚至是显示数据的首页,变得非常容易。只需连接到您的服务器,将您的表拖过,结构就位,包括外部/主要/唯一键引用。需要对此数据执行更新?使用向导,指定现有过程,或让向导为您生成特殊/存储过程。

你已经完成了,将它连接到GridView,你可以快速做很多事情:在断开连接时求助,重新查询,编辑多个记录,以及单个或批量更新。当你在想要快速完成的项目上工作时,这种便利很难理解。如果你需要的话,那么使用这种本机“DataTable”格式的东西对于XML恶作剧来说变得很方便,因为DataSet模型在很多东西中使用了XML。

我承认我还没有检查出最新版本的ORM,我不确定是否有一个LINQ向导可以在几次点击后完成这么多工作。而且大多数人在适应新技术方面都有点慢,所以很容易看出它是如何被大量使用的。

看到新的动态数据服务站点/项目是基于LINQ to SQL或LINQ to EF构建的,我认为潮流可能最终会改变为新模型。

答案 1 :(得分:6)

我认为数据集的最大问题是它们基本上鼓励你在内存中创建一个dbms。我喜欢Linq /实体满足您的数据需求的方式,他们依靠标准的.Net集合类和泛型来工作。

那就是说,我不会忘记能够动态读取无类型数据并在内存中应用关系等的能力,这仍然是非常强大的功能,具体取决于你的情况。

答案 2 :(得分:6)

我从来没有正确使用过DataSet(连接到SQL Server),但它对于特定需求一次非常有用。我发现DataSet和DataView是用于实现数据/ BLL层的非常方便和功能的基类,直到我能够把一些经过深思熟虑的东西放到适当的位置。如果没别的话,你应该知道很多功能。

答案 3 :(得分:2)

我想我在同一条船上:我很少使用数据集,我当然不认为是适配器模型的专家(我认为“Fill”是我唯一的方法真正用于生产) - 但他们偶尔会有一些用途。例如,如果您需要执行一些临时SQL代码,则无法预测架构(因此ORM没有帮助),并且不希望混淆IDataReader等简单,小数据集。

除此之外(即大部分时间),我更喜欢标准类 - ORM或手动。

答案 4 :(得分:2)

最公开使用DataSet是为了创建数据库的内存副本。我发现即使使用.NET 1.0,我也从未使用它。在多用户环境中,断开连接的模型总是不合适的。

如果完全忽略关系数据库,仍然可以使用DataSet:

  • 如果您正在编写要将数据加载并保存到文件中的表单应用程序,则可以定义类型化的DataSet,然后使用XmlDataDocument类加载并保存它。

  • Crystal Reports可以通过读取内存中的DataSet来生成报告。您可以仅为一个特定报告创建类型化DataSet,并使用.NET语言编写复杂的业务逻辑来填充此DataSet。这使您无需使用Crystal Reports功能实现业务逻辑(这可能是一项非常困难的任务)

  • 您可以使用一行代码将DataGridView附加到DataSet,以获得糟糕的用户界面,但仍然可以完成您需要的工作。适用于内部测试工具等。 (不足以发货给客户)。

答案 5 :(得分:2)

喜欢数据集的3个理由:

  • 对于winforms,他们支持数据绑定/过滤大多数orms不
  • 许多第三方工具(esp报告工具)内置了对数据表/集的支持,而不支持普通对象..
  • 在调试时,您可以右键单击已填充的表并查看内容。这是真实的 节省时间。

总而言之,它们具有很多功能。我不喜欢适配器。我经常编写自己的数据库适配器。

答案 6 :(得分:1)

我发现这些表(不是很多)确实不会像项目列表或某种历史数据那样长时间改变。

答案 7 :(得分:0)

我使用Typed DataSet作为一个非常低的杠杆orm。我知道这不是一半好,但尝试向大人物解释..
因此,我不是改变世界并引入一些非微软oss工具(或者最终从.net2.0迁移到3.5,并使用l2s或ef),我只是使用数据集来保存我的查询结果,并轻松地将它们绑定到网格,文本框和组合框在需要的地方。 我发现以后能够使用像

这样的东西
MyDataSet.MyDataTableRow row = // whatever
if (row.Price > 100) // do something

非常有用。

答案 8 :(得分:0)

对于Pros Programmer。它们使用DataSet,因为DataSet对象旨在鼓励对长时间运行的活动使用乐观并发,例如远程处理数据和与数据交互。