iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >ADO.NET数据异步处理的方法有哪些
  • 248
分享到

ADO.NET数据异步处理的方法有哪些

2023-06-17 20:06:36 248人浏览 薄情痞子
摘要

这篇文章主要介绍“ADO.net数据异步处理的方法有哪些”,在日常操作中,相信很多人在ADO.NET数据异步处理的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ADO.NET数据异步处理的方法有哪些

这篇文章主要介绍“ADO.net数据异步处理的方法有哪些”,在日常操作中,相信很多人在ADO.NET数据异步处理的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ADO.NET数据异步处理的方法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

很多开发语言都支持异步通信,在ADO.NET中支持异步处理的提供程序有System.Data.sqlClient在针对大批量数据插入过更新时,使用ADO.NET数据异步处理方法可以不用等待多有数据更新完毕才能操作或者进行下步处理,改善了用户体验SqlCommand对象方法如下:

ADO.NET数据异步处理
BeginExecuteNonQueryEndExecuteNonQuery
◆BeginExecuteXmlReaderEndExecuteXmlReader
◆BeginExecuteReaderEndExecuteReader
◆begin前缀的方法传入参数,end前缀的方法返回输出参数和返回值
◆begin前缀方法返回的是IAsyncResult用于追踪一步方法的执行状态
◆IAsyncResult.AsnycState用户自定义的状态对象
◆IAsyncResult.AsnycWaitHandle呼叫代码的等待形式,是等其中的一个异步方法完成还是全部完成
◆IAsyncResult.CompletedSynchronously获取所有异步方法是否同时完成
◆IAsyncResult.Iscompleted是否执行完毕,可以根据此属性进行下部动作

在连接字符串中加入"async=true"如果所有的命令都是同步的建议在连接字符串中显施加入,"async=false"如果有一部分命令是异步执行,又有一部分是同步同步执行,建议分别建立两个连接对象,如果"async=true"时,也可以执行同步命令,但是会损失一些资源

////obtainconnectionstringsfromconfigurationfilesor  ////similarfacility  ////NOTE:theseconnectionstringshavetoinclude"async=true",for  ////example:  ////"server=myserver;database=mydb;integratedsecurity=true;async=true"  //strinGConnstrAccouting=GetConnString("accounting");  //stringconnstrHR=GetConnString("humanresources");  ////definetwoconnectionobjects,oneforeachdatabase  //using(SqlConnectionconnAcc=newSqlConnection(connstrAccounting))  //using(SqlConnectionconnHumanRes=newSqlConnection(connstrHR))  //{  ////openthefirstconnection  //connAcc.Open();  ////starttheexecutionofthefirstquerycontainedinthe  ////"employee_info"stored-procedure  //SqlCommandcmdAcc=newSqlCommand("employee_info",connAcc);  //cmdAcc.CommandType=CommandType.StoredProcedure;  //cmdAcc.Parameters.AddWithValue("@empl_id",employee_id);  //IAsyncResultarAcc=cmdAcc.BeginExecuteReader();  ////atthispoint,the"employee_info"stored-procisexecutinGon  ////theserver,andthisthreadisrunningatthesametime  ////nowopenthesecondconnection  //connHumanRes.Open();  ////starttheexecutionofthesecondstored-procagainst  ////thehuman-resourcesserver  //SqlCommandcmdHumanRes=newSqlCommand("employee_hrinfo",  //connHumanRes);  //cmdHumanRes.Parameters.AddWithValue("@empl_id",employee_id);  //IAsyncResultarHumanRes=cmdHumanRes.BeginExecuteReader();  ////nowbothqueriesarerunningatthesametime  ////atthispoint;moreworkcanbedonefromthisthread,orwe  ////cansimplywaituntilbothcommandsfinish-inourcasewe'll  ////wait  //SqlDataReaderdrAcc=cmdAcc.EndExecuteReader(arAcc);  //SqlDataReaderdrHumanRes=cmdHumanRes.EndExecuteReader(arHumanRes);  ////nowwecanrendertheresults,forexample,bindthereaderstoanasp.net  ////WEBcontrol,orscanthereaderanddrawtheinfORMationina  ////WebFormsform.  //}   stringcustid="ALFKI";  stringorderid="10643";   //NOTE:connectionstringsdenotedby"connstring"havetoinclude  //"async=true",forexample:  stringconnstring="server=(local);database=northwind;integratedsecurity=true;async=true";  //we'llusethreeconnectionsforthis  using(SqlConnectionc1=newSqlConnection(connstring))  using(SqlConnectionc2=newSqlConnection(connstring))  using(SqlConnectionc3=newSqlConnection(connstring))  {  //getcustomerinfo  c1.Open();  SqlCommandcmd1=newSqlCommand(  "SELECTCustomerID,CompanyName,ContactNameFROMCustomersWHERECustomerID=@id",c1);  cmd1.Parameters.Add("@id",SqlDbType.Char,5).Value=custid;  IAsyncResultarCustomer=cmd1.BeginExecuteReader();  //getorders  c2.Open();  SqlCommandcmd2=newSqlCommand("SELECT*FROMOrdersWHERECustomerID=@id",c2);  cmd2.Parameters.Add("@id",SqlDbType.Char,5).Value=custid;  IAsyncResultarOrders=cmd2.BeginExecuteReader();  //getorderdetailifuserpickedanorder  IAsyncResultarDetails=null;  SqlCommandcmd3=null;  if(null!=orderid)  {  c3.Open();  cmd3=newSqlCommand("SELECT*FROM[OrderDetails]WHEREOrderID=@id",c3);  cmd3.Parameters.Add("@id",SqlDbType.Int).Value=int.Parse(orderid);  arDetails=cmd3.BeginExecuteReader();  }  //buildthewaithandlearrayforWaitForMultipleObjects  WaitHandle[]handles=newWaitHandle[null==arDetails?2:3];  handles[0]=arCustomer.AsyncWaitHandle;  handles[1]=arOrders.AsyncWaitHandle;  if(null!=arDetails)  handles[2]=arDetails.AsyncWaitHandle;  //waitforcommandstocompleteandrenderpagecontrolsaswe  //getdataback  SqlDataReaderr;  DataTabledt;  for(intresults=(null==arDetails)?1:0;results<3;results++)  {  //waitforanyhandle,thenprocessresultsastheycome  intindex=WaitHandle.WaitAny(handles,5000,false);//5secs  if(WaitHandle.WaitTimeout==index)  thrownewException("Timeout");  switch(index)  {  case0://customerqueryisready  r=cmd1.EndExecuteReader(arCustomer);  if(!r.Read())  continue;  lblCustomerID.Text=r.GetString(0);  lblCompanyName.Text=r.GetString(1);  lblContact.Text=r.GetString(2);  r.Close();  break;  case1://ordersqueryisready  r=cmd2.EndExecuteReader(arOrders);  dt=newDataTable();  dt.Load(r);  dgOrders.DataSource=dt;//data-bindtotheordersgrid  dgOrders.Refresh();  r.Close();  break;  case2://detailsqueryisready  r=cmd3.EndExecuteReader(arDetails);  dt=newDataTable();  dt.Load(r);  dgDetails.DataSource=dt;//data-bindtothedetailsgrid  dgDetails.Refresh();  r.Close();  break;   }  }  }

到此,关于“ADO.NET数据异步处理的方法有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: ADO.NET数据异步处理的方法有哪些

本文链接: https://www.lsjlt.com/news/292829.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 生态系统中流行库和框架的贡献指南
    作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
    99+
    2024-05-15
    框架 c++ 流行库 git
  • C++ 生态系统中流行库和框架的社区支持情况
    c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
    99+
    2024-05-15
    生态系统 社区支持 c++ overflow 标准库
  • c++中if elseif使用规则
    c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
    99+
    2024-05-15
    c++
  • c++中的继承怎么写
    继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
    99+
    2024-05-15
    c++
  • c++中如何使用类和对象掌握目标
    在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
    99+
    2024-05-15
    c++
  • c++中优先级是什么意思
    c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
    99+
    2024-05-15
    c++
  • c++中a+是什么意思
    c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
    99+
    2024-05-15
    c++
  • c++中a.b什么意思
    c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
    99+
    2024-05-15
    c++
  • C++ 并发编程库的优缺点
    c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
    99+
    2024-05-15
    c++ 并发编程
  • 如何在 Golang 中备份数据库?
    在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
    99+
    2024-05-15
    golang 数据库备份 mysql git 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作