【问题标题】:Typed dataset correct usage类型化数据集正确使用
【发布时间】:2012-12-18 17:13:20
【问题描述】:

如果我理解正确,我是否必须使用表适配器将数据放入我的类型化数据集中,我不能只创建强类型数据集并让数据自动加载? (我也在 VS2012 中使用 .net 3.5 项目)

例如,我必须这样做才能获取数据(如果我这样做,我会得到数据)

 var a = new EvtDataSetTableAdapters.tblFileTableAdapter();
  a.GetData();

与仅仅这样做相比,(如果我这样做,我什么也得不到......我可以理解它是否延迟加载......??)

EvtDataSet o = new EvtDataSet();
var r = o.tblFile.Select();

【问题讨论】:

    标签: c# visual-studio strongly-typed-dataset typed-dataset


    【解决方案1】:

    所有数据集(类型和无类型)都与数据库无关,即任何数据表都可以从 Oracle 中填充,就像从 MS-Sql 中一样容易。 DataSet 不知道架构或连接字符串。

    您需要一个适配器来读取/读取后备存储。

    (而 DataTable.Select() 可能来自 Linq-to-Datasets)。

    【讨论】:

    • 这似乎很奇怪,它会通过将连接字符串添加到我的设置中,我可以在我的类型数据集上使用 linq 吗?我要一次加载每张桌子,还是有办法一次大量填充?
    • 您只能在填充数据集后使用 Linq。最实用的方法是使用适配器。
    【解决方案2】:

    备受诟病、被误解的强类型数据集! 通常是的,您将使用TableAdapter 来加载数据并执行更新。 使用设计器,您可以将参数查询添加到表适配器以支持您的程序所需的操作,例如 select * from customers where customerid = @customerid

    打电话给FillbyCustomerid

    然后,您将使用TableAdapter 提取所选客户的数据,方法如下:

    dim ta as new dscustomerstableadapters.customertableadapter
    dim ds as new dsCustomers
    ta.fillbycustomerid (ds.customers, ourid)
    

    【讨论】:

    • 我想我越来越了解这些数据集,我希望找到更多与后端访问数据库有动态连接的数据集,这样表格就可以自动加载(或至少在第一次需要时),以及通过数据集(通过数据表)进行的更改,将立即在数据库中查看。
    • 好吧,数据集不是这样工作的。它们本质上是“断开连接的”——您将数据拉入其中,对其进行处理,然后提交您的更新。 (数据集在 SO 上的名声似乎非常糟糕 - 请参阅其他一些回复 - 但在 SO 上,似乎许多垃圾数据集的人实际上并不知道如何使用它们。)
    • 是的,它们似乎更像是快照,但是,当使用旧的 Access 文件时,它可能是我的最佳选择。
    • 如果您正在寻找更直接的内容,您可能希望查看使用 datareader 对象提取数据并使用 sqlcommands 进行更新。在 ADO.Net 内部和外部还有许多其他方法。
    • Ref 'snapshot' 我猜想你使用的技术是,最终你将数据拉入你的应用程序,处理它,然后将其发回。在某处总会有一个更新命令——它不会以任何其他方式到达那里。无论如何,数据集是与 Access 数据库交互的一种非常合理的方式。人们经常错过的是你应该在你的 tableadapter 中创建参数查询来只提取你想要的数据——人们似乎经常认为你将整个表拉到 ds.ds 中。不。与此同时,如果可能的话,我会选择 SQL Express 而不是 Access。
    【解决方案3】:

    类型化数据集的最佳用法:忽略,从不使用。改为 OTM。使用 LINQ。数据集——有类型和无类型——在 .NET 1.0 中很糟糕,从那时起,甚至 MS 也意识到了替代方案。 10年没用过一个,不会用一个。

    例外:报告 SQL 是“从外部输入”的应用程序,因此您基本上只需要一个通用数据容器。

    使用 EntityFramework 或众多替代方案之一。

    【讨论】:

    • 我使用的是旧的 Access Db,所以我的选择有限。
    • 但是如果你有替代品,我愿意吗?
    • @NateGates 不确定。我不处理 10 年的访问权限。废话不是我曾经处理过的事情。抱歉,这就是访问。自从 SQL CE 以来,几乎没有任何情况下访问不仅仅是过时的东西。不知道 - 你可以试试 NHibernate。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2011-11-15
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多