有效總結ADO參數的使用說明
其實對于ADO參數這個東西我有許多想說的,如果不設置游標為adUseClient,那么我在取return和output參數的時候,必須在我把記錄集關閉以后才能取,就是說,必須先取記錄集,然后關閉它,***再取return和output參數。
設成adUseClient就ok了,另外有ADO參數一點就是,Execute 方法返回的游標繼承該設置。Recordset 將自動從與之關聯的連接中繼承該設置。我把pConn設成adUADO參數seClient,那么***,我的記錄集也是adUseClient的了。
在可以執行這個存儲過程了m_pRecordset = m_pCommand->Execute(0,0,adCmdStoredProc);這個時候,如果接下來用variant_t ret_val = m_pCommand->Parameters->GetItem((long)0)->Value;那么將得不到值而如果像下面這樣調用的話就可以得到返回值了m_pRecordset->Close();variant_t outpuADO參數t_para = m_pCommand->Parameters->GetItem((long)0)->Value;
MS ADO.net給這一現象的回復是#t#
You can think of a storADO參數ed procedure as a function in your code. The function doesn’t return a value until it has executed all of its code. If the stored procedure returns results and you haven’t finished processing these results, the stored procedure hasn’t really finished executing. Until you’ve closed the DataReader, the return and output parameters of your Command won’t contain the values returned by your stored procedure.
也就是說Execute()函數應該看成是直到m_pRecordset關掉以后才會正確返回.關于輸出參數的處理也和這一樣,因為返回值本身就是當成輸出參數來處理的.通過這種方法,我們可以得到一個存儲過程的返回值和結果集,而且對于所有的存儲過程都可以一樣使用,不必為某個特定ADO參數的存儲過程去寫代碼,具有一定的通用性.
所以一但調用它以后,就可以獲取SP的那些信息,那些參數的信息,可以通過pCmd->Parameters->Item[_variant_t(_bstr_t(\"@pin1\") )]->Value=_variant_t(3); 這樣的方式來設置參數
如果要使用Parameter的辦法的話,就不要用refresh了,事實上,如ADO參數果先把這些參數的值設置好了,如 inParam2->Value = _variant_t(_T(\"DD1\"));,一旦refresh后,這些參數就沒有意義了。
Command.Prepare方法能夠提高數據源中重復的參數化命令的性能。Prepare指示數據源為多個調用優化特定的命令。為了更高效率地使用Prepare,你必須十分清楚數據源怎樣回應Prepare調用。對于類似SQL Server 2000的數據源,命令是隱式優化的,ADO參數對Prepare的調用是沒有必要的,但是對于另一些數據源,例如SQL Server 7.0,Prepare效率更高。

















