频道直达 - 学院 - 下载 - 交易 - 特效 - 字库 - 手册 -排名-工具- 繁體
网页教学网站开发 设为首页
加入收藏
联系我们
建站搜索: 常用广告代码   用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发设计技术教程 -> Asp.Net教程 -> 漫谈.Net PetShop和Duwamish ADO.NET数据库编程(3)

漫谈.Net PetShop和Duwamish ADO.NET数据库编程(3)

作者:未知  来源:转载  发布时间:2005-9-15 0:21:36  发布人:acx

减小字体 增大字体

     .Net PetShop数据访问剖析
  
    OK,Duwamish看完了,下面我们来看看PetShop的数据访问机制。
  
    PetShop只有一个项目,它采用的分层办法是将中间层和数据层都写成cs文件放在Components目录里,其中数据层就是一个名为Database的类,它封装了所有对数据库的底层操作。下面是示例代码段:
  
  
  public void RunProc(string procName, out SqlDataReader dataReader) {
  SqlCommand cmd = CreateCommand(procName, null);
  dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
  }
  
    我们看到了一个跟Duwamish截然不同的另一种数据访问方式,它将所有的数据访问方法抽象出来做成一个RunProc方法,至于返回数据呢,呵呵,它有点偷懒,直接返回一个DataReader给你,你自己去读吧。还记得Duwamish采用的层间数据传输载体是什么吗?对了,是DataSet,它被数据层填充后返回给了中间层。但是这里,数据层和传输层的数据传输载体变成了DataReader,实际上,还不能称它为数据载体,因为数据还没开始读呢,在这里,DataReader的作用和指针有点类似,也许我们应该称它为“数据引用”:)
  
    接着往下看,DataReader被怎么“处理”的:
  
  
  public ProductResults[] GetList(string catid, int currentPage, int pageSize, ref int numResults)
  {
  numResults = 0;
  int index=0;
  SqlDataReader reader = GetList(catid);
  ProductResults[] results = new ProductResults[pageSize];
  
  // now loop through the list and pull out items of the specified page
  int start = (int)((currentPage - 1) * pageSize);
  if (start <= 0) start = 1;
  
  // skip
  for (int i = 0; i < start - 1; i++) {
  if (reader.Read()) numResults++;
  }
  if (start > 1) reader.Read();
  
  // read the data we are interested in
  while (reader.Read()) {
  if (index < pageSize) {
  results[index] = new ProductResults();
  results[index].productid = reader.GetString(0);
  results[index].name = reader.GetString(1);
  index++;
  }
  numResults++;
  }
  
  reader.Close();
  
  // see if need to redim array
  if (index == pageSize)
  return results;
  else {
  // not a full page, redim array
  ProductResults[] results2 = new ProductResults[index];
  Array.Copy(results, results2, index);
  return results2;
  }
  }
  
    注意到currentPage和pageSize了吗?原来在这里就进行了数据分页,只返回满足需要的最少的数据量,而不是象我们很多喜欢偷懒的人一样,简单的将整个DataTable一股脑的绑定到DataGrid,造成大量的数据冗余。
  
    在这里,数据被真正的读出来,并且被手动填充到一个自定义的对象数组中,我们来看看这个数组的定义:
  
  
  public class ProductResults
  {
  private string m_productid;
  private string m_name;
  
  // product props
  public string productid {
  get { return m_productid; }
  set { m_productid = value; }
  }
  
  public string name {
  get { return m_name; }
  set { m_name = value; }
  }
  }
  
    非常之简单,不过我有点奇怪为什么不使用struct呢?是不是.Net中struct和class的性能差距已经可以忽略不计了?
  
    分析总结
  
    通过观察这两个商店的具体实现,我们得到了两个不同的数据访问模式,Duwamish采用的是以DataSet为核心,因为DataSet提供了这方面大量的相关方法,所以整个应用的数据传输,数据格式定义,数据校验都围绕着DataSet来进行,整个架构定义非常清晰和严谨,但是却显得有些庞大。PetShop在整个程序中没有采用一个DataSet,程序非常的简洁,轻灵,但是没有Duwamish那么强的健壮性。这两个程序是Microsoft公司不同的小组写出来的代码,所以有着不同风格。不过都应该能代表.Net的标准模式。看到这里,你应该对文章开头提出的那些疑问有一个比较形象的认识了吧。
  
    另外,请再次注意,PetShop在打开数据连接之后,并没有马上读取数据,而是将DataReader传递给另外的对象来执行数据读的操作,然后才关闭连接。这样,数据连接的时间加长了,而数据库连接是一项非常宝贵的服务器资源,相比之下,Dawamish在连接数据库之后马上进行填充,然后迅速释放掉数据库连接的方式更加有利于大量用户的并发访问。
  
    再一点,上文的程序中没有提到更新操作,PetShop采用的是使用Command对象执行单个存储过程的方式来进行更新操作,是属于一种在线即时数据更新模式。而Dawamish采用的是DataAdapter的Update方法,将DataSet的改变一次性的提交到数据库中,属于离线数据更新模式。这种模式的好处是可以一次性更新大批量数据,减少数据库的连接次数。缺点是如果数据库在改动非常频繁的情况下需要实时的跟踪数据变化就不合适了。需要根据具体的情况采用具体的数据更新办法。
  
    总的来说,如果您只需要快速的读取数据并显示出来,推荐您采用DataReader,如果您需要对数据进行大量的修改,还有大量并发访问的可能,而且不需要实时的跟踪数据库的变化,推荐您使用DataSet。当然,这两种情况有点极端了,实际的应用环境也许有着很复杂的条件,具体需要您自己审时度势,综合采用,不过我个人还是比较喜欢PetShop那种轻灵的风格 :)
  
    本文只尝试对以上两个典型的.Net应用例程的数据访问机制做了一个简单的追踪分析。
  


将本文收藏到QQ书签与更多好友分享
[打 印]
[] [返回上一页] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 要10G免费网络硬盘的请进..
· 通过google 赶快来赚美金..
· 注册码大全十
· 头像-qq头像(qq新头像)4..
· 让你轻松架设FTP服务器1..
· 注册码大全三
· 梦幻背景图片7
· 卡通动物图片6
· 网页制作素材-按钮素材2..
· 让你轻松架设FTP服务器5..
· 风景图片8
· 注册码大全九
· 让你轻松架设FTP服务器2..
关注此文读者还看过
· 没有定义变量的问题
· Dreamweaver代码片断提高..
· 弹出菜单(纵向和横向效..
· 程序开发者使用最多的五..
· CSS实现简单的横向排列d..
· 有默认参数的函数
· 一个模仿oso的论坛程序(..
· 前雅虎亚洲区CTO李大力跳..
· 马云:招财进宝属艰难收费..
· ASP 3.0高级编程(十五)..
· 使用 ASP+ 列表绑定控件..
· APACHE(5)
· CSS在Dreamweaver中无效..
· 关键词的优化难易度分析..
· 用Socket发送电子邮件(利..
· ASP讲座之二:读取通过表..
相关文章
· Photoshop绘制连衣裙..
· 3D Max漂亮首饰的制作..
· 有趣人物为你讲述网站..
· 从基础开始:CSS实用教程3-2..
· 从基础开始:CSS实用教..
· 漫谈.Net PetShop和Duwamis..
· 漫谈.Net PetShop和D..
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
粤ICP备05092265号