网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > DotNet > ADO.NET > 使用ADO.NET2.0提升数据交互性能  

使用ADO.NET2.0提升数据交互性能

2007-02-05  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

  

     前言:
  
  这篇文章起源于在公司写的一个PPT,但是由于PPT本身的限制很多内容无法表达或是详细的解释,于是变下定了决心。写篇文档!
  
  在这篇文章里我将尽量简单的描述下ADO.NET 2.0的新特性,尤其是配合SQL Server 2005所展现出来的强大实力。如果想进一步了解ADO.NET 2.0编程方面的话,可以去阅读Glenn Johnson的--"ADO.NET 2.0高级编程[微软推荐丛书] ".定价:46元,网络购书的话打了折只要30块就可以了。
  
  
  一:功能强大的ADO2.0
  
  2005年底(2005年10月)与 SQL Server 2005一起出现的是 .NET Framework 2.0 版本,其中用来访问数据库的 ADO.NET类也升级到 ADO.NET 2.0 版。
  
  
  ADO.NET 2.0 除了增强旧功能外,也提供了相当多的新功能,包含了以基础类为本(base-class-based)的数据源提供程序(provider)模型、异步访问架构、批处理更新与大量数据复制(bulk copy)、SQL Server 2005 的回调通知、单一连接同时多执行结果集(MARS)、执行统计、强化的 DataSet 类等等。换句话说,若要有效发挥 SQL Server 2005 的功能,前端应用程序最好用 ADO.NET 2.0 来开发。 网管联盟bitsCN@com
  
  
  ADO.NET 2.0 提供了相当多的新增功能,一些与数据源提供程序无关,也就是访问各种数据库都可以用到的功能,但有很大的一部分是专属于 SQL Server 2005,针对 SQL Server 2005 的新功能提供给前端应用程序开发使用。
  
  
  二: 使用多数据结果集(仅限2005)
  
  在之前版本的 SQL Server 同一时间一条连接只能传递一个 SELECT 语法执行后返回的结果集。如果想在一次连接后返回多个查询内容只能使用类似如下的方法来实现:
  
  
  
  SqlDataAdapter myDataAdapter = new SqlDataAdapter("StoredProcedureName",myConnection);
   myDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
  
   myDataAdapter.SelectCommand.Parameters.Add("@sqlstr",sqlstr);
   DataSet ds = new DataSet();
   myDataAdapter.Fill(ds);
   return ds;
   ds.Tables[0],ds.Tables[1],ds.Tables[2],分别对应三个结果集

网管联盟bitsCN@com

  
  SQL Server 2005提供了在同一条连接上可以同时传递多个没有游标结构(cursorless)的结果集(也称为默认结果集),此功能称为 Multiple Active Resultsets(MARS)。如此可以节省需要同时打开的连接数,但要注意的是连接字符串设置要加上 MultipleAct-iveResultSets=true 属性,否则默认不启动多数据结果集的功能。
  
  
  
  string connstr = "server=(local);database=northwind;integrated security=true; ";
  
  
   SqlConnection conn = new SqlConnection(connstr);
   conn.Open();
   SqlCommand cmd1 = new SqlCommand("select * from customers", conn);
   SqlCommand cmd2 = new SqlCommand("select * from orders", conn);
   SqlDataReader rdr1 = cmd1.ExecuteReader();
   // next statement causes an error prior to SQL Server 2005
   SqlDataReader rdr2 = cmd2.ExecuteReader();
   // now you can reader from rdr1 and rdr2 at the same time. 网管u家u.bitsCN.com

     三:异步执行Command命令
  
  在 ADO.NET 2.0 以前,通过 Command 类(如 SqlCommand、OleDbCommand等)执行 SQL
  
  命令的线程一定要停下来等待执行结果。ADO.NET 2.0 新增了异步程序访问接口(asynchronous API),让线程发出命令后可以继续执行接下去的程序代码。
  
  而在 ADO.NET 2.0 当前的版本只有 SqlClient 支持异步程序访问接口。
  
  以往编写程序时,我们可以直接通过.NET Framework 所提供的多线程机制,或是以 Delegate 类包装多线程的方式,在 .NET Framework 所提供的异步架构下,设计调用执行 Command 对象实例。这些方法都是让一条工作线程(Worker Thread)停止在后台中等待执行结果,一旦有结果后,工作线程再通过标准的机制告知结果。
  
  
  原本 ADO.NET 的 Command 对象执行 SQL 语法的方法有
  
  ExecuteReader、ExecuteNonQuery、ExecuteXmlReader 以及 ExecuteScalar 等,搭配 .NET
  
  Framework 原来就提供的异步模型惯例,除了 ExecuteScalar 方法外,其余的方法都新增了以 Begin 和 End 关键字开始的一对方法。也就是说 ExecuteReader 方法是同步执行,若要以异步的方式执行相同的功能,则调用 BeginExecuteReader 和 EndExecuteReader 这一组方法。在 .NET Framework 中,以 Begin 为字首的方法负责传入同名方法所需的参数,而以 End

网管网www_bitscn_com


  
  为字首的方法用来取回执行结果,
  
  例如某个方法的定义如下:
  
  public override int ExecuteNonQuery()
  
  则以异步调用的起始方法定义如下:
  
  public IAsyncResult BeginExecuteNonQuery(AsyncCallback callback, object stateObject)
  
  Begin~ 系列的方法会多加存放回调方法(Delegation)的指针参数,也就是上述语法中的 callback 参数。并提供语法中的 stateObject参数,让你设置想要带到 End~ 对应方法的信息。而 Begin~ 系列方法最后返回的是代表异步执行状态的 IAsyncResult 对象实例,而不是原本同步执行方法的返回结果,你可以藉此查询异步执行的状况。
  
  
网管u家u.bitsCN.com

网管bitscn_com


TAGs   交互   性能   数据   提升   使用   执行   方法   可以   结果   ADO.NET      
 上一篇:自定义带结构的可序列化数据集DataSet   下一篇:DOTNET:LINQ与ADO.NET 3.0的创新
使用ADO.NET2.0提升数据交互性能 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: