【问题标题】:Why do we still use DataSets in .NET?为什么我们仍然在 .NET 中使用 DataSet?
【发布时间】:2010-10-07 19:58:20
【问题描述】:

DataSets 是 .NET 1.0 中的重要内容之一,即使现在使用 .NET 3.5,我仍然发现自己不得不使用它们......尤其是当我必须调用一个返回数据集的存储过程时,我然后最终不得不手动转换为对象以使其更易于使用。

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

DataSet 是否按日期通过了使用?随着 NHibernate 等 O/R 映射器的出现,我想知道 DataSet 是否会消亡,或者它们还有一席之地吗?目前,我在是否应该留出时间重新访问 DataSet 并学习如何正确使用它们或 100% 落后于 O/R 映射器并完全放弃 DataSet 之间犹豫不决。

DataSet 是否提供 NHibernate 和 LINQ 等技术无法提供的任何功能?如果不是,那我们为什么还要使用它们?

【问题讨论】:

    标签: .net orm dataset


    【解决方案1】:

    我认为我在同一条船上:我很少使用数据集,我当然不声称自己是适配器模型方面的专家(我认为“Fill”是我真正使用过的唯一方法在生产中)-但它们有时确实有一些用途。例如,如果您需要执行一些特别的 SQL 代码,无法预测架构(因此 ORM 没有帮助),并且不想为了一个简单的小集合而与IDataReader 等混淆数据。

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

    【讨论】:

      【解决方案2】:

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

      也就是说,我不会放弃在内存中动态读取无类型数据和应用关系等的能力,这仍然是非常强大的功能,具体取决于您的情况。

      【讨论】:

      • 您对内存中的 dbms 是完全正确的。出于某种原因,.NET 1.0 预发布时间框架中的早期营销炒作几乎鼓励了这种使用。理性的开发人员只能尝试向管理层解释这种方式并不完全奏效——对于一些老板类型来说非常令人沮丧。
      【解决方案3】:

      我从未正确使用过 DataSet(连接到 SQL Server),但它曾经对特定需求很有用。我发现 DataSet 和 DataView 是非常方便且实用的基类,用于实现数据/BLL 层,直到我可以将一些经过深思熟虑的东西落实到位。如果没有别的,您应该注意那里的许多功能。

      【讨论】:

        【解决方案4】:

        DataSet 最广为人知的用途是创建数据库的内存副本。我发现我从来没有用过它,即使是 .NET 1.0。断开连接的模型在多用户环境中总是不合适的。

        如果您完全忽略关系数据库,数据集仍然有用途:

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

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

        • 您可以使用一行代码将 DataGridView 附加到 DataSet 以获得糟糕的用户界面,但这可能会完成您需要的工作。适合内部测试工具之类的东西。 (不足以运送给客户)。

        【讨论】:

          【解决方案5】:

          我觉得这些表(不是很多)非常好,它们肯定不会像项目列表或某种历史数据那样在很长一段时间内发生变化。

          【讨论】:

            【解决方案6】:

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

            您大功告成,将其连接到 GridView,您就可以快速做很多事情:重新查询、重新查询、在断开连接时编辑多条记录,以及单个或批量更新。当您从事想要快速完成的项目时,这种便利是很难放弃的。另外,如果您需要这种本机“DataTable”格式的东西,那么对于 XML 恶作剧会很方便,因为 DataSet 模型在底层使用 XML 来处理很多东西。

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

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

            【讨论】:

              【解决方案7】:

              喜欢数据集的 3 个理由:

              • 对于 Winform,它们支持数据绑定/过滤,大多数 Orms 不支持
              • 许多第 3 方工具(尤其是报告工具)内置了对数据表/集的支持,而不是对普通对象的支持。..
              • 在调试时,您可以右键单击已填满的表格并查看其内容。这是一个真实的 节省时间。

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

              【讨论】:

                【解决方案8】:

                我将类型化数据集用于一个非常低杠杆的组织。我知道它没有一半好,但试着向大人物解释一下..
                因此,我没有改变世界并引入一些非微软的 oss 工具(或者最终从 .net2.0 迁移到 3.5,并使用 l2s 或 ef),而是使用数据集来保存我的查询结果,并轻松地将它们绑定到网格,文本框和组合框在需要的地方。 我发现以后可以使用类似的东西

                MyDataSet.MyDataTableRow row = // whatever
                if (row.Price > 100) // do something
                

                非常有用。

                【讨论】:

                  【解决方案9】:

                  对于专业程序员。他们使用 DataSet 是因为 DataSet 对象旨在鼓励将乐观并发用于长时间运行的活动,例如远程处理数据和与数据交互。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-05-18
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-06-19
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多