VC程序訪問Oracle數(shù)據(jù)庫的存儲過程時的問題解決方案
在用VC開發(fā)的應用程序中,訪問Oracle數(shù)據(jù)庫的存儲過程中出現(xiàn)了問題如下:在腳本里面調用存儲過程的時候,如果用exec mysp 就報告"無效字符";如果用 {call mysp} 則報告“游標錯誤” 奇怪的是,用一個古老的版本的平臺程序則可以用 {call mysp} 完成調用。
原因排查:
最初的se程序在訪問數(shù)據(jù)庫接口的時候只區(qū)分select 開頭的語句和非select開頭的語句。對于非select開頭的語句一律用odbc的 CDatabase::ExecuteSQL函數(shù)處理;對于select開頭的語句使用 CRecordSet::Open處理。所以{call mysp}語句是用CDatabase::ExecuteSQL處理的,沒有問題。
而新版本的se為了處理call mysp的返回,使用了CRecordSet::Open來處理。這在微軟的SqlServer下沒有問題,但是在Oracle下就不行了。
解決方案:
在連接oracle數(shù)據(jù)庫的時候,call mysp這樣的語句不能用 crecordset::open處理,只能用cdatabase::executesql處理。
說明:exec mysp 一般只能用在數(shù)據(jù)庫服務器自己的客戶端里面,如sqlserver的 企業(yè)管理器或者oracle的sql plus ,不能用在c語音接口里面。而call mysp則可以用于任何場合。
關于在VC開發(fā)的程序里面訪問Oracle數(shù)據(jù)庫存儲過程的問題的原因分析及解決方案就介紹到這里了,如果您想了解更多關于Oracle數(shù)據(jù)庫的知識,可以看一下這里的文章:http://database.51cto.com/oracle/,相信一定可以帶給您收獲的!
【編輯推薦】