应该受是JDBC,DAO,Entity...等java领域的数据层思想的影响,至今,我都很难理解ADO.NET.  ADO.NET以DataSet为核心,我问过一些人,都说应用的的各个层次之间传递的是DataSet对象(作为数据的容器).  我不禁要问:  1.当DataSet到达表示层的时候(如果没有绑定的话),还要程序员去关心数据是哪个表,哪个行,哪个列的,这样的设计好吗? 至少我觉得不好,在表示层关心的应该是数据的本身,而不是通过DataSet.Tables["tableName"].Rows[1].Columse[0]的方式访问数据,显然,这种方式与表名,列名严重耦合,恶果就不必说了.  2.以DataSet为核心,事务怎么处理?  3..Net程序,如果我写的是没有web界面,没有桌面窗口的win service,数据层应该怎么写?  在我看来DataSet只是在绑定界面的时候有用罢了.  请斧正,指教.   

解决方案 »

  1.   

    ADO.NET以DataSet为核心?这是神马人说的?
      

  2.   

    任何数据库访问技术,底层都是和表结构耦合的,难道“JDBC,DAO”不是吗?问题的关键是数据访问层能否自动适配表结构和对象模型。
      

  3.   

    这使我想起了好多小孩子,从小在幻想自己当一名男人,结果到了20多岁反而不能成为男人了。虽然ADO.NET有“那个啥”,但是它不是什么以它为核心的。它是很平衡的技术,不是你先夸张然后挥舞大棒的那样。实际上我使用ADO.NET一百次,也未必使用一次DataSet。
      

  4.   

    LZ没听说过linq to sql么?再不济还有nhibernate,entity framework这些ORM框架在 DataSet基本上可以是过去式了
      

  5.   

    1.DataSet确实是ADO.net的核心构件,微软的原文描述是:
      Main Component 和 major component
    2.DataSet也是ado.net的精华所在,
      DataSet是对数据的统一描述,是高度抽象的,他几乎就是xml,json,
      具体功能参见MSDN:
     http://msdn.microsoft.com/zh-cn/library/system.data
     http://msdn.microsoft.com/zh-cn/library/system.data.dataset
     http://msdn.microsoft.com/zh-cn/library/27y4ybxw(v=vs.110).aspx
      

  6.   

    针对楼主的问题点:
    1.在分层开发中,DataSet不会到达View层,而是通过ViewController动态渲染,
      也就是说,不仅view层不知道数据细节,就连Controller也是数据无关的,
      只有Model层才有可能(不是一定)直到数据细节  以下是摘自程序中的代码片段,仅供参考:
    //根据model,动态创建视图
    return (ViewDrv.MethodViewDrv.CreateView(this.BusinessModel.MethodSearchById));
    //根据View,更新model
    ViewDrv.MethodViewDrv.UpdateParams(this, this.BusinessModel.MethodSearchById);
    //调用ado.net(DAL),获取数据
    return DAHelper.GetDataRow(this.BusinessModel.MethodSearchById);
    //根据Model,用DataRow中的数据填充视图(在这里,程序渲染了一个DetailView)
    ViewDrv.DataKeyViewDrv.UpdateView(_dr
        , this.BusinessModel.MethodSearchById.DataKeys);
      

  7.   

    针对楼主的问题点:
    2.不仅支持事务,还支持约束,关系,触发器等等系统事务
    3.ado.net不仅提供数据描述的抽象,还提供了数据访问的抽象,
      还是以代码举例:
    //调用ado.net,提交一个insert或者update的数据访问,和界面没有任何关系,程序员也不知道什么字段
    DAHelper.ExecuteMethod(this.BusinessModel.MethodSave);
      

  8.   

    各位大侠说的太好了。学习并MARK。
    以前并没有考虑这个问题,只是应用DataSet查询数据而已。当然主要应用于winform,现在看来Ado.net还有很多其他功能可以开发。
      

  9.   


    在底层当然会与表名,列名耦合,但是到了表示层代码还有表名,列名耦合,就不好了吧你不觉得这们写DataSet["table_name"],这个"弱类型的"字符串容易出错吗?
      

  10.   

    但是这很方便呀,你把table_name当成Key不就不纠结了。
      

  11.   

    [Quote=引用 5 楼  的回复:]LZ没听说过linq to sql么?再不济还有nhibernate,entity framework这些ORM框架在 DataSet基本上可以是过去式了
    ORM框架在大数据量快速访问的时候,往往是一种障碍。
      

  12.   

    1,我不认为
    2,DataSet 仅仅是数据集啊  是ado的五个重要的对象之一。
    3,一模一样。