小弟刚做asp.net开发
想问一下
我在数据库层查询数据库
查出来的记录集是使用DataReader,DataSet,Table,还是生成一个与数据库字段一样的类的数组或者其他别的方法返回给其他层处理呢?
请各位大哥大姐指点一下最好能消息说说优缺点
优先次序 效率->安全->大众化

解决方案 »

  1.   

    Table是DataSet里面的数据容器,与DataSet一个效果。
    ==========================
    DataReader效率要比DataSet高.   
      因为:   DataReader每次只返回一条记录,通过维持连接返回多次;     
                  而DataSet一次性全部返回所有的数据.   
        
      使用场合:   
                DataReader适用于只返回一条记录时经常用.例如,只想通过某个参数查询单值时用到   
                DataSet适用于返回较大数据集时用.
    =========================
    以上引用:ChengKing在C#中的发言。
      

  2.   

    楼主参考以下文章:
    http://bbs.51js.com/viewthread.php?tid=14818&highlight=DataReader
      

  3.   

    用三层架构吧
    建一Dal库和一Model库如model库建一ClassModel using System;
    namespace Picture.Model
    {
        /// <summary>
        /// 实体类ClassModel 。(属性说明自动提取数据库字段的描述信息)
        /// </summary>
        public class ClassModel
        {
            public ClassModel()
            { }
            #region Model
            private int _id;
            private string _name;
            private bool _state;
            private string _summary;
            private DateTime _add_time;
            private int _topic_count;
            private string _subclass;
            /// <summary>
            /// 类别编号
            /// </summary>
            public int id
            {
                set { _id = value; }
                get { return _id; }
            }
            /// <summary>
            /// 类别名称
            /// </summary>
            public string name
            {
                set { _name = value; }
                get { return _name; }
            }
            /// <summary>
            /// 是否对外开放
            /// </summary>
            public bool state
            {
                set { _state = value; }
                get { return _state; }
            }
            /// <summary>
            /// 简介
            /// </summary>
            public string summary
            {
                set { _summary = value; }
                get { return _summary; }
            }
            /// <summary>
            /// 
            /// </summary>
            public DateTime add_time
            {
                set { _add_time = value; }
                get { return _add_time; }
            }
            /// <summary>
            /// 类别下的主题数
            /// </summary>
            public int topic_count
            {
                set { _topic_count = value; }
                get { return _topic_count; }
            }
            /// <summary>
            /// 简介
            /// </summary>
            public string subclass
            {
                set { _subclass = value; }
                get { return _subclass; }
            }        #endregion Model    }
    }Dal库里建一方法using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    using Picture.Model;namespace Picture.Da
    {
        public class ClassDal
        {        #region Class_List
            /// <summary>
            /// 获得维护列表
            /// </summary>
            
            public static ArrayList Class_List()
            {
                ArrayList classes = new ArrayList();
                SqlDataReader dr = null;
                Database.RunProc("Class_list", out dr);
                try
                {                while (dr.Read())
                    {
                        ClassModel classification = new ClassModel();
                        classification.id = (int)dr["id"];
                        classification.name = (string)dr["name"];
                        classification.state = (bool)dr["state"];
                        classification.summary = dr["summary"].ToString();
                        classification.add_time = (DateTime)dr["add_time"];
                        classification.topic_count = (int)dr["topic_count"];
                        classification.subclass = dr["subclass"].ToString();
                        classes.Add(classification);
                    }
                }
                finally
                {
                    dr.Close();
                }
                return classes;
            }
        }
    }表示层
    再引用命名空间
    using Picture.Model;
    using Picture.Da;就可以在方法里引用ClassDal.Class_List方法了
      

  4.   

    DataReader效率要比DataSet高. Table与DataSet一个效果
    关键是看你用在哪了,上楼说的挺好的
      

  5.   

    看看样板示例,微软的petshop,duwamish是怎么存的
      

  6.   

    zhuanshen712: DataSet适用于返回较大数据集时用. (如果数据量很大DataSet应该很慢吧)jack20080808: ArrayList使用完了怎么把这个资源给收回来呢?还有就是ArrayList网络传输速度上怎么样?chengqscjh:DataReader效率要比DataSet高.Table与DataSet一个效果是不是指的是使用DataAdapter中的fill方法吧。想问一下网络传输中这3种类型那么传的比较快。DataReader读出来的数据再放到TABLE或者DATASET中,然后返回这样做的话谁比较快呢?还有就是这些数据在网络传输中那个稳定?安全上如何考虑呢?
      

  7.   

    网络传输用实体类集合(类似3楼的方法...最好改成泛型)效率最高...安全性由传输协议保证和数据集合没关系...例如可以用加密的WebService...
      

  8.   

    ”程序是死的   人是活的“
    但是把结构破坏了对以后的维护扩展没有影响吗?
    而且把结构大乱别人看你的代码就不容易看懂吧楼上hy_lihuan 大哥说的很对
    我就是在想学会编程呀所以请教大家一些经验之谈
    既然你说到这了就给点指点吧
    程序的效率和框架结构上的经验能分享点吗~