網上查了不少文章,要想在程式中顯示儲存過程的進度還是有些困難,只能變通一下了。
原理:在儲存過程中自己估算執行的程序,比如儲存過程需要執行100次資料插入操作,那麼基本上每執行一次插入語句儲存過程就執行了1%,然後想辦法把這個百分比傳遞出去就行了。傳遞也沒想到什麼好辦法,就在資料庫中建個進度表,兩個字段,乙個id,乙個進度值。儲存過程中每進行一段操作就更新一下這個進度值,這樣其他程式就可以通過讀取進度表獲得儲存過程執行的進度了。最後當儲存過程結束時,刪掉進度表中的資料。
原理還是比較容簡單,但有些問題:
1、併發問題:多個程式同時請求這個儲存過程時,進度表就亂了
解決:在儲存過程的引數裡加個guid,就是sqlserver newid()函式出來的值,主要用來標識一次儲存過程的執行,由於每次的guid都不同,所以併發時,儲存過程更新的是進度表種不同的資料,不會有混亂的現象。另外,儲存過程結束前一定要刪除該次操作的進度資料,以免進度表中堆積過的無用資料。
2、阻塞問題:當程式執行儲存過程時,整個程式會發生阻塞,導致讀進度的程式部分無法執行,直到儲存過程結束,這樣進度讀取就沒有意義了。
解決:多執行緒。為執行儲存過程的部分建立乙個執行緒,這樣程式的主線程就不會阻塞了,再在開始執行儲存過程的時候設定乙個timer,每隔一段時間就讀一次進度值(根據guid讀取)。
VC 中的MFC程式的執行過程
程式的誕生 afxwinmain執行afxwininit,後者又呼叫afxinitthread,把訊息佇列盡量加大。cmyframewnd構造函式呼叫create,產生主視窗。我們在create引數中指定的視窗類是null,於是mfc根據視窗種類,自行為我們註冊乙個名為 afxframeorview...
vc中ADO執行儲存過程方法記錄
ado執行儲存過程,需要用到 commandptr介面。方法如下 可將如下 段放在資料庫初始化連線中 commandptr m pcommand 定義 commandptr介面的操作物件 m pcommand.createinstance uuidof command 建立例項 m pcommand...
在ASP中執行SQL SERVER 儲存過程
在asp中執行儲存過程要使用command物件。command物件代表乙個命令 例如乙個sql查詢或乙個sql儲存過程 在開始使用ado之前,必須建立乙個odbc資料來源,odbc資料來源包含了如何與乙個資料提供者進行連線的資訊。資料來源共有三種型別 使用者資料來源 系統資料來源 檔案資料來源。在此...