电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 网页制作-> FrontPages教程
使用ado.net2.0提升数据交互性能(2)_ado.net应用
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 

三:异步执行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

为字首的方法用来取回执行结果,

例如某个方法的定义如下:

public override int ExecuteNonQuery()

则以异步调用的起始方法定义如下:

public IAsyncResult BeginExecuteNonQuery(AsyncCallback callback, object stateObject)

Begin~ 系列的方法会多加存放回调方法(Delegation)的指针参数,也就是上述语法中的 callback 参数。并提供语法中的 stateObject参数,让你设置想要带到 End~ 对应方法的信息。而 Begin~ 系列方法最后返回的是代表异步执行状态的 IAsyncResult 对象实例,而不是原本同步执行方法的返回结果,你可以藉此查询异步执行的状况。

 
而获得执行结果的方法定义如下:

public int EndExecuteNonQuery(IAsyncResult asyncResult)

在调用与 Begin~ 对应的 End~ 方法时,需要带入 Begin~ 方法所返回的 IAsyncResult

对象实例。异步执行完毕后,取回与原先同步执行方法相同的执行结果。

 
由于我们在执行完 Command 对象访问数据库的方法后,都会返回对象,如 ExecuteReader 取回 DataReader实例;ExecuteNonQuery 取回受影响的记录条数;ExecuteXmlReader 取回 XmlReader 实例。因此大概都需要通过End系列方法来获得执行结果,否则这些结果就遗失在系统中。

若要异步执行 Command 命令,另一个必需设置的是:数据库连接字符串内要加上 async=true 属性。若连接字符串没有加上该属性,而通过 Command对象实例调用异步执行的方法,则会产生异常(exception)。若 Command 通过连接执行时,重头到尾都是以同步的方式执行,则依照默认 async=false 的方式设置比较节省资源。若某些命令需要同步执行,另一些需要异步执行,则可以考虑使用不同的连接。

在介绍范例应用程序前,我们先稍微谈一下 .NET Framework 所提供的公共的异步运行应用程序设计模式,不只是 ADO.NET2.0,在其他访问耗时的程序编写上,也都可以套用这个模式。

.NET Framework内置了让应用程序异步运行的功能,让你在编写应用程序时,不会因为某些耗时等待的操作让程序停止响应,操作界面停滞让用户感觉起来好像死机一样。一般会以多线程的方式处理这种需求,但若你不熟悉线程的运行,或是想利用线程池(Thread Pool)的好处,都可以在较为耗时的操作上,采用 .NET Framework 所提供的异步功能。

一般来说文件 I/O、网络访问乃至于 Web Services 访问,以及本节所讨论的 DB 访问等都较为耗时,.NET Framework为这一类的类都提供了上述以 Begin~/End~开头的非同步执行方法,而这些方法皆成对出现。当然,也有可能是自己编写的方法其商业逻辑非常复杂,导致调用该方法后,需要等待一段时间来完成,这时还可以通过 .NETFramework 所提供的委托(Delegate)类来创建异步运行。

 
但是实际在我们的应用中,

但我们不需要获知DB服务器的返回信息时,我们推荐使用委托,尤其是在Web开发中。

因为在页面线程启动异步数据库访问时,当页面业务执行完毕后仍然无法放开访问数据库的异步线程。这是我们不希望看到的,但是使用委托却可以避免这个麻烦(webservice异步应用中一样如此)。

http://www.cnblogs.com/trisaeyes/archive/2006/12/30/608069.html


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·frontpage2002高效使用的技巧_frontpages教程
·用vb编写windowscgi应用程序_visualbasic教程
·frontpage2000值得学习的10个操作技巧(下)_frontpages教程
·轻松制作自己的信息反馈web页_frontpages教程
·用frontpage 2000做样式表_frontpages教程
·网上电影发布步步进_frontpages教程
·frontpage2000实务高级网站管理_frontpages教程
·精彩新思路:frontpage xp玩特效_frontpages教程
·认识frontpage 2002扩充插件之七_frontpages教程
·获得、设置鼠标双击间隔_visualbasic教程

最新文章
·用frontpage手把手教你制作网上电影的发布_frontpages教程
·在xp中如何使用windows vista屏保_windows xp
·vb.net实现窗体图标最小化到状态栏_vb/vb.net教程
·用photoshop消除照片中的杂色条纹_photoshop教程
·photoshop照片处理:纠正倾斜照片_photoshop教程
·photoshop实例提高:魔幻特效制作实录_photoshop教程
·windows xp系统还原点丢失怎么办?_windows xp
·photoshop打造融化的巧克力字_photoshop教程
·用frontpage 2003发布您的网站_frontpages教程
·用frontpage2003轻松制作asp动态网页_frontpages教程


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号