Username: Password:

数据库异步操作(ADODB).
来源:CSDN作者:肉丝 发布时间:2008-03-30 00:00:00

  在VC或VB中需要耗时的查询时,  客户一般需要等待很长一段时间, 这种情况客户是无法容忍而且也无法取消, 那么怎样么办呢. 

         1.首先采用多线程的方式, 工作线程和UI线程分开, 工作线程处理完毕时向主线程发消处理完毕的消息;另一种方法采用向窗口发送消息. 注意这里是寄送的方式,不要问我为什么, 我也不会告诉您.简而言之,            

        PostThreadMessae和PostMessage两个API函数,当然您得传递参数或使用全局变量也能够.

         2.SQL语句的执行.大家知道(也许您更有可能没有使用过, 那赶紧用吧,免得您的客户骂您),在ADODB的三个对象中Connection, Recordset, Command都支持异步的方式(别告诉我您不晓得, 反正我也不会告诉您的),在其参数

       Options中使用adAsyncExecute ( 0x10) , 这样您执行命查询或返回记录集时都是以异步方式,换句话说就是盖子帮您另外开了个线程处理。

       注意:通常创建一个线程要等待其结束,因为我们有可能要实现等待用户取消执行, 所以。。。。。,另外能够通过判断对象的状态是:Connection的状态是否为adStateOpen(当然是您正确连接到数据源,否则我就要打您PP), 知道怎样做了吧;另外一种就通过事件通知, ExecuteComplete(看MSDN去), 要实现客户端通知(得懂COM知道, 具体的也看书去吧或我下次有空再写出来)。

       哈哈, 这样就实现了异步执行查询了哈, 不要告诉我您发现了新大陆或说您知道的再者我说错的敬请赐教。

一段示例:

_ConnecctionPtr pCon;

if(FAILED(pCon.CreateInstance("ADODB.CONNECTION"))) return FALSE;

pCon->Open("Provider=SQLOLEDB;UID=SA;PWD=;", "", "", adOpenUnspecified /*这里用adAsyncExecute也能够实现异步方式,对应的事件是ConnectionComplete);

      while(TRUE)

 {

      if(bCancel)

     {

           pCon->Cancel(); //一定要执行,否则出现异常不关我的事情,因为您拿了人家的东西迟早要还的。

           return FALSE;

    }

    if(pCon->adState == adStateOpen) break;  // 处理完了哈,该退出了。

     Sleep(0);  //一定要执行这条语句,否则盖子的工作效率低哈,为啥子要使用0去看MSDN。

 

}

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅