首页 新闻 会员 周边 捐助

DataTable 与 IList<user> 泛型应用区别?

0
悬赏园豆:20 [已关闭问题] 关闭于 2010-09-29 22:48

 

以下两种都可以帮定到Repeater1上,但是有什么区别呢?那位高人能详细说明一下。

=====================================================

方法一

public static DataTable ExecuteTable(string strSQL)
        {
            DataTable dt = new DataTable();
            SqlConnection connection = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand(strSQL, connection);
          
            connection.Open();
            using (SqlDataReader reader =cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(reader);
            }   

            return dt;
        }

---------邦定数据-----------

string sql = "SELECT * FROM Role";

            DataTable dt = help.ExecuteTable(sql);
            this.Repeater1.DataSource = dt;
            this.Repeater1.DataBind();

======================================================

方法二、
        public IList<user> ExecuteIList(string strSQL)
        {

            IList<user> myTable = new List<user>();
            SqlConnection connection = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand(strSQL, connection);
            connection.Open();
            using (SqlDataReader rdr = SqlHelper.ExecuteReader(CommandBehavior.CloseConnection))
            {
                while (rdr.Read())
                {
                    user cat = new usr(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
                    myTable.Add(cat);
                }
            }
            return myTable;
        }

---------邦定数据-----------

           string sql = "SELECT * FROM UDS_Role";

            this.Repeater1.DataSource = help.ExecuteIList(sql);
            this.Repeater1.DataBind();

 

 

Ewin的主页 Ewin | 初学一级 | 园豆:17
提问于:2010-09-16 21:22
< >
分享
所有回答(5)
0

首先让我选择的话,我选择第二种方法

2种方法都是通过DataReader来读取的,而第一种方法又把结果放到了DataTable中,DataTable会开辟内存空间,个人感觉性能会比较低

yixin841210 | 园豆:1138 (小虾三级) | 2010-09-16 21:32
IList<user> 也是保存一个集合,相对datatable来说,也差不了多少?
支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2010-09-16 21:35
@Ewin: IList占内存小
支持(0) 反对(0) yixin841210 | 园豆:1138 (小虾三级) | 2010-09-16 21:49
@Ewin:其实如果你只是取数据的话,不处理数据的话,还是返回DataReader
支持(0) 反对(0) yixin841210 | 园豆:1138 (小虾三级) | 2010-09-16 21:51
0

如果使用第二种,在读的时候拼接起来,不绑定到rpt上,直接输出来。效果和第一个还有差别。

但是你一个个添加到list里,不也是在内存中吗,Rpt内部还得做序列化。

Astar | 园豆:40805 (高人七级) | 2010-09-16 21:40
使用第二种在读的时候拼接起来,不绑定到rpt上,主要考虑分层问题。DAL与BLL上要用,不直接用到UI层上。
支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2010-09-16 21:43
@Ewin:第一种就不能了吗?
支持(0) 反对(0) Astar | 园豆:40805 (高人七级) | 2010-09-16 21:51
@Astar: 第一种就不能了吗? 是指
支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2010-09-16 21:53
@Astar: 能具体一下那个好,好在那里?
支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2010-09-16 21:55
@Ewin:你考虑的分层问题,第一种就不能放进DAL返回DataTable了吗?
支持(0) 反对(0) Astar | 园豆:40805 (高人七级) | 2010-09-16 21:55
@Astar:第一种可以放进DAL返回DataTable的。
支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2010-09-16 22:00
@Astar:功能上两者都可以实现,但我想他们有什么区别,区别在那里
支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2010-09-16 22:00
0

有很多好处,比如分层开发中,前端开发人员使用 List<T>  绑定可以有智能提示,不必去关心Datatable的行与列,

<%#(((ApplyClass)Container.DataItem)).ApplyClassName%>

 

相关Datatable而言,泛型更加面向对象。

不过在填充的时候比较麻烦。

clound | 园豆:481 (菜鸟二级) | 2010-09-17 09:43
Repeater进行邦定不要考虑行与例吧 但是针对列表框来说,可以不用考虑行与例。
支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2010-09-17 12:09
我的意思 是如果你用DataTable 你还得知道 DataTable 的索引值分别是什么
支持(0) 反对(0) clound | 园豆:481 (菜鸟二级) | 2010-09-17 17:28
0

以上二种方法都不好.

风浪 | 园豆:2996 (老鸟四级) | 2010-09-17 11:12
那什么方法算好呢?请指教
支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2010-09-17 11:55
@Ewin: 直接用SqlHelper的dataset返回绑定就是了
支持(0) 反对(0) 风浪 | 园豆:2996 (老鸟四级) | 2010-09-17 16:25
@FengLang: dataset 返回绑定 性能比以上两个差的不知多少
支持(0) 反对(0) Ewin | 园豆:17 (初学一级) | 2010-09-17 17:55
0

其实如果真正要高效率的话

直接用stringbulid输出的效率最高了!!!

自由飞翔9999 | 园豆:105 (初学一级) | 2010-09-17 14:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册