none
做项目过程中用过以下几种绑定数据的方式,不知道哪种效率最高 RRS feed

  • 问题

  • 第一种:用datareader,假设以下语句返回了一个List ,那么我前台用<%=list()[0]%>的方法绑定
    using (SqlConnection conn = new SqlConnection(连接字符串))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(sql语句, conn))
                    {
                        using (SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                        {
                            if (sdr.HasRows)
                            {
                                while (sdr.Read())
                                {
                                    在这里做一些事情
                                }
                            }
                            sdr.Close();
                        }
                    }
                }
    第二种:前台用Eval(%#Eval("字段")%)的形式绑定

    DataSet ds=new DataSet()
    using (SqlConnection conn = new SqlConnection(连接字符串))
                {
                    conn.Open();
                    using (SqlDataAdapter sda = new SqlDataAdapter(sql语句,conn))                 
                    sda.fill(ds)
               {
                控件.DataSource=ds;
                控件.DataBind();
    第三种:如果只返回一个结果,那么用ExecuteScalar,但是比较郁闷的是如果数据库中没有数据,他就会报错。
     public string excuteGetReturn(string strSql)
            {
                cmd.Connection = getCon();
                cmd.CommandText = strSql;
                string result = cmd.ExecuteScalar().ToString();
                closeCon();
                return result;
            }
    我想请教各位高人:
    1、<%=list()[0]%>与Eval(%#Eval("字段")%)绑定,哪个效率高?
    2、如果只返回一条记录,是用datareader效率高还是用ExecuteScalar效率高?
    3、传说中<%# ((DataRowView)Container.DataItem)["xxxx"]%>效率最高,他能不能适用于dataset、list<>、datareader?,也就是说["xxxx"]能不能换成list()[0]这种形式。
    4、现实问题:
    现在在一个项目中要取一个数据表的某些字段,我用了datareader,然后把取到的东西放到了list中,然后在前台用<%=list()[0]%>这种形式输出,请问效率怎么样?
    2009年5月12日 3:03

答案

  • 1   eval 效率因为是使用反射  相较=list()[0 ]比较低

    2  ExecuteScalar比较高 

    3 <%# ((DataRowView)Container.DataItem)["xxxx"]%>并没有<%=list()[0]%>高效    datarowview 里面个仍然是包裹了其他数据实体  你的list 会比较直接

    4 效率还算可以  但是你的list  里面是 object 数组    这样还是会造成一些开箱装箱上的损耗    建议使用 从数据库产生的实体类  比如 linq 2 sql 或者 EF
    工作突然有点忙 嘿嘿
    2009年5月12日 4:35