zoukankan      html  css  js  c++  java
  • 一个顶N个的NextResult

          在大多数网站的开发中,很多功能都是模块化了的,方便统一和管理,用户控件显然是个不错的选择!我们常常会有很多栏目,封在用户控件里面,都是用来读取每个栏目的记录,每个控件的数据读取都是独立的,也就是说,这个页面有多少个这样的用户控件,就要建立多少个数据库连接,非常耗费资源!虽然用户控件可以用缓存,但是毕竟效率没有一次性读取的效率高!所以想了想,发现用DataReader的NextResult可以实现这样的效果!
    首先是一个控件绑定的Helper:
     public class ListBinder
        
    {
           
    private List<Repeater> _controllist=new List<Repeater>();
            
    public List<Repeater> Controllist
            
    {
                
    get return _controllist; }
            }

            
    public  void BindAll(IDataReader dr)
            
    {
                
    int length=this._controllist.Count;
                
    for (int i = 0; i < length;i++ )
                
    {
                    
    if (i == 0)
                    
    {
                        _controllist[i].DataSource 
    = dr;
                        _controllist[i].DataBind();
                    }

                    
    else
                    
    {
                        
    if (dr.NextResult())
                        
    {
                            _controllist[i].DataSource 
    = dr;
                            _controllist[i].DataBind();
                        }

                    }

                }

            }

        }
    接下来是测试调用的代码:
      string sql = "select top 5 * from [CaseShow] where [CategoryId]=9;select top 5 * from [CaseShow] where [CategoryId]=10;select top 5 * from [CaseShow] where [CategoryId]=11;select top 5 * from [CaseShow] where [CategoryId]=12";
                
    using (IDbConnection con = AFrameWork.Data.DataFactory.GetConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
                
    {
                    
    try
                    
    {
                        IDbCommand cmd 
    = con.CreateCommand();
                        cmd.CommandType 
    = CommandType.Text;
                        cmd.CommandText 
    = sql;
                        con.Open();
                        
    using (IDataReader dr = cmd.ExecuteReader())
                        
    {
                            ListBinder lb 
    = new ListBinder();
                            lb.Controllist.Add(rpZhuanti);
                            lb.Controllist.Add(rpAd);
                            lb.Controllist.Add(rpHunli);
                            lb.Controllist.Add(rpPs);
                            lb.BindAll(dr);
                        }


                    }

                    
    catch
                    
    {
                        con.Close();
                        
                        
    throw;
                    }
    这里一次性读了四个栏目出来,只建立了一个数据库连接,比原来的效率和性能要好很多!不过这里对于结果集和控件的绑定对应就要自己控制了,当然我相信聪明的你会有办法搞定的,呵呵!
  • 相关阅读:
    PCL点云
    unity碰撞,刚体笔记
    动画剪辑 状态配置 脚本编写2
    unity中动画剪辑,状态机关系配置,脚本编写方式1
    unity给物体着色加纹理图 material(材质)
    C++/Java小白解Leetcode题,发现了知识盲区……
    NLP之统计句法分析(PCFG+CYK算法)
    Java:基于TCP协议网络socket编程(实现C/S通信)
    Java实现:抛开jieba等工具,写HMM+维特比算法进行词性标注
    Java多线程技术:实现多用户服务端Socket通信
  • 原文地址:https://www.cnblogs.com/smallmuda/p/1774875.html
Copyright © 2011-2022 走看看