您的位置:首页 > 编程语言 > C语言/C++

在VC++程序中显示存储过程的执行进度

2009-04-25 00:25 253 查看
网上查了不少文章,要想在程序中显示存储过程的进度还是有些困难,只能变通一下了。

原理:在存储过程中自己估算执行的进程,比如存储过程需要执行100次数据插入操作,那么基本上每执行一次插入语句存储过程就执行了1%,然后想办法把这个百分比传递出去就行了。传递也没想到什么好办法,就在数据库中建个进度表,两个字段,一个ID,一个进度值。存储过程中每进行一段操作就更新一下这个进度值,这样其他程序就可以通过读取进度表获得存储过程执行的进度了。最后当存储过程结束时,删掉进度表中的数据。

原理还是比较容简单,但有些问题:

1、并发问题:多个程序同时请求这个存储过程时,进度表就乱了

解决:在存储过程的参数里加个GUID,就是SqlServer newid()函数出来的值,主要用来标识一次存储过程的执行,由于每次的GUID都不同,所以并发时,存储过程更新的是进度表种不同的数据,不会有混乱的现象。另外,存储过程结束前一定要删除该次操作的进度数据,以免进度表中堆积过的无用数据。

2、阻塞问题:当程序执行存储过程时,整个程序会发生阻塞,导致读进度的程序部分无法执行,直到存储过程结束,这样进度读取就没有意义了。

解决:多线程。为执行存储过程的部分创建一个线程,这样程序的主线程就不会阻塞了,再在开始执行存储过程的时候设置一个Timer,每隔一段时间就读一次进度值(根据GUID读取)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: