這個問題由來已久,由于不是非常影響項目進度,所以一直沒有重視。最近閑來,又遇到此問題,決心仔細研究一番。上網搜了半天,整整半天,沒有發現比較通俗易懂的文章,沒辦法,看看微軟的資料,自己動手吧,把這個解決過程記錄下來,以供大伙參考。 問題描述
這個問題由來已久,由于不是非常影響項目進度,所以一直沒有重視。最近閑來,又遇到此問題,決心仔細研究一番。上網搜了半天,整整半天,沒有發現比較通俗易懂的文章,沒辦法,看看微軟的資料,自己動手吧,把這個解決過程記錄下來,以供大伙參考。
問題描述:
ADODB::_ConnectionPtr m_pConnection1;
ADODB::_ConnectionPtr m_pConnection2;
ADODB::_RecordsetPtr m_pRecordset1;
ADODB::_RecordsetPtr m_pRecordset2;
初始化過程略去。。。
當使用
m_pRecordset1->Open(pSql ,m_pConnection1.GetInterfacePtr(),ADODB::adOpenDynamic,ADODB::adLockOptimistic,ADODB::adCmdText);
進行INSERT、UPDATE、Delete 操作后,立即用m_pConnection2 和m_pRecordset2 對更新的表進行查詢,發現剛剛m_pConnection1添加的數據根本沒法查出來,修改的數據也沒更新,刪除記錄也依舊乖乖的呆在數據庫里。
這種情況只有在使用兩個或兩個以上連接進行數據庫操作時才會出現,只有一個連接是不會有這個問題的。但很多時候我們不得不使用多個連接同時操作數據,所以問題必須解決。
解決辦法:
在執行增刪改的 SQL語句時使用“事務Transaction” , 使用JRO引擎強制刷新 查詢連接的 數據緩存。
#import "c:\program files\common files\system\ado\msjro.dll" //開始事務 m_pConnection->BeginTrans(); //inster update delete操作 代碼省略 //提交 m_pConnection->CommitTrans();//在查詢前刷新緩存 刷新過后進行查詢操作,數據就不會有延遲現象了。 BOOL CDBOperate::RefreshData() { JRO::IJetEnginePtr jet(__uuidof(JRO::JetEngine)); jet->RefreshCache(m_pConnection); return TRUE; }
參考文章
http://support.microsoft.com/kb/200300
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com