数据集是不是存在任何已知问题

Posted

技术标签:

【中文标题】数据集是不是存在任何已知问题【英文标题】:Are there any known issues with Dataset数据集是否存在任何已知问题 【发布时间】:2017-10-18 12:28:55 【问题描述】:

对检索多个 DataTable 的存储过程或检索单个 DataSet 的单个存储过程使用多次调用哪个更好?

一位更有经验的同事告诉我,使用 DataSet 存在已知问题和错误,它使代码不可读,并且通常最好使用 DataTables 和对存储过程的多次调用。

在线搜索我无法找到困扰 DataSet 的记录问题和错误,同时也了解到它被广泛使用。

【问题讨论】:

请向您更有经验的同事索取具体文档,以便确保正确解决这些问题。他可能会回避,向你吹烟,然后转移话题。他可能会给你发一两篇完全不相关的文章,或者直接与他的说法相矛盾。除非他给你一些具体和相关的东西(他可能会!),否则他是个傻瓜,你应该礼貌地听他说的话——然后忽略它。只是出于好奇,这家伙对不变性有一种奇怪的执念吗? @EdPlunkett 我尊重这位同事,尤其是因为他是我的上司,所以我会礼貌地请你不要称呼他的名字。只是 DataSet 的使用如此普遍,以至于让我感到困惑,为什么我们不应该使用它。这可能是个人喜好和代码风格的问题 我很感激您不想向高级同事泼脏水。 CDove,下面,比我有更委婉的看待它的方式。但底线是你的怀疑是正确的:这个人告诉你一些不真实的事情。如果您被禁止在工作中使用该课程,请不要。他们签署你的支票。但不要在这里怀疑你自己的判断。 @MilosMilosavljevic 请看我的回答。不幸的是,所有开发人员在某些时候都会养成一个坏习惯(并且不得不把自己踢出去)说一些糟糕的事情,因为我们还没有弄清楚。它来自现代软件开发,具有很多脆弱的工作保障。 虽然迈克尔的回答描述了一个可能的问题(当它们被用作服务调用签名的一部分时)我接受了 CDove 的回答,因为它更适合我的问题的描述,其中上下文设置在问题一上与 DataTable 相比,可能会面对 Dataset。 【参考方案1】:

我在DataSets 中看到的一个问题是它们被用作服务调用签名的一部分时(我见过的示例是.NET Remoting、WCF 和传统 Web 服务)。

这是一个不好的做法的原因是因为DataSet 的有效负载很大,这会影响响应时间。

另一个原因是微软过去并不总是让DataSets 从一个版本的.NET 向后兼容到另一个版本。因此,如果您在.NET 4.0 中开发应用程序并且您正在调用的服务正在.NET 1.1 上运行,那么当将.NET 4.0 DataSet 传递给接受.NET 1.1 DataSet 的服务时,它可能会中断,因为向后可比性问题。

【讨论】:

如果您的 .Net 1.1 服务无法接受 .Net DataSet,问题不在于您使用了 DataSet,而是您仍然有一个服务由已有近 2 年历史的技术制成。 除此之外,您在这里所说的某些内容完全不准确(例如 DataTables 提供了与 .Net 1.1 的更大兼容性)。来源:***.com/questions/2250/datatable-vs-dataset、social.msdn.microsoft.com/Forums/en-US/… 你不能总是控制你正在与之通信的端点,所以说有人应该升级是一个有争议的问题。原帖的重点是关于DataSets 的已知问题,我指出了我自己的经验。我对我所说的任何事情也没有不准确的地方。我也没有提及 DataTables 提供与 .NET 1.1 的更大兼容性。【参考方案2】:

啊。我以前遇到过这种事情。请允许我翻译一下你同事告诉你的内容。

使用 DataSet 存在已知问题和错误,它使代码不可读,通常最好使用 DataTables 和对存储过程的多次调用。

意思

作为这里的资深开发人员,我对 DataSets 的使用还不足以知道如何有效地使用它们。我记得当他们是全新的时候人们对他们的评价,但我是一条不会学习新技巧的老狗,我希望你按照我的方式做事,这样我就不会看起来很糟糕。

令人遗憾的是,这很常见。在我现在工作的地方,曾经是这里的 Web 开发人员的那个人试图让我相信 Linq “太新”并且“充满了 bug”,因为(正如我后来发现的)他无法阅读 Lambda 表达式。当我向他展示 C# 隐含属性字段时,让他大吃一惊。

如果您正确使用它们并注释您的代码,DataSets 就不是不可读或错误的。 DataTables 与存储过程调用同样有效,但 DataSet 基本上是类固醇上的 DataTables 的集合。您可能正在使用存储过程或直接使用 LINQ to SQL 来填充两者。但是,在使用任何数据库时,问题变成“我怎样才能以最少的数据库调用次数完成最多的工作,同时又不影响我的应用程序或服务器的性能,以及通过网络连接”。答案应该推动您的数据收集方法。

【讨论】:

为您的翻译点赞。

以上是关于数据集是不是存在任何已知问题的主要内容,如果未能解决你的问题,请参考以下文章

NG2-Charts 无法绑定到“数据集”,因为它不是“画布”的已知属性

如何检查 BigQuery 中是不是存在数据集?

对数据集进行分片是不是有任何指导方针?

如何在合并数据集之前检查行是不是存在(SQL Server)

打开“Sheet1$”的行集失败。检查对象是不是存在于数据库中

检查两个 Django 查询集是不是有任何共同的项目