我用ADO编程向sql server写入数据的同时要执行我自己编的一个sql server的存储过程(循环每隔一份钟执行一次,耗时很长),用ADO的execute("exec MyProcedure")方法调用此存储过程会阻塞程序,最笨的方法是单独创建一个线程来等待execute("exec MyProcedure")执行完毕,除此之外有没有好一些的方法?比如ADO的某一个方法调用"exec MyProcedure"不等其返回就继续执行下面的程序?
谢谢!

解决方案 »

  1.   

    采用异步方式:
    在异步 I/O 中,应用程序从 Windows NT 或 Windows 2000 中请求读取或写入操作。Windows NT 或 Windows 2000 立即将控制返回给应用程序。应用程序然后可以执行其它的工作,过一会儿执行测试以查看读写操作是否已完成。相反,在同步 I/O 中,操作系统直到读和写完成才将控制返回给应用程序。使用异步 I/O 使 SQL Server 实例得以在个别线程执行批处理时使它们所完成的工作最多。
      

  2.   

    我尝试用ADO的connection对象的Execute方法确实不阻塞了,原型如下:
    Execute (CommandText, RecordsAffected, Options)
    我是这样调用的
    Execute("exec MyProcedureName", NULL, adAsyncExecute); 其中adAsyncExecute就表示exec MyProcedureName异步执行,但是过了好久我发现此命令根本没有执行(因为我用ctrl+z强制推出程序时,VC报错:debug error:abnormal termination. 可是不用异步参数时按ctrl+z时VC就不报错。)
    我的程序是多线程的,系统要执行的任务很多,是不是exec MyProcedureName命令排在队列根本没有机会执行?有什末解决方案吗?是不是Execute的参数还有问题啊?