每次寫用ado訪問資料庫的程式, 都會把早年我兄弟zhang寫的**拿出來抄一抄, 這一次比較特別的是需要呼叫stored procedure. 我痛恨stored procedure, 因為他讓邏輯分散了, 更加難以維護. 由於各種原因, 比如已有**量巨大, 比如合作方公司要求使用stored procedure作為介面, 還是無法避免的使用這個鳥東西, 這是我老人家第一次用ado呼叫stored procedure. 費了一番勁, 大概3個小時才整好這個呼叫.
接著來了第二個麻煩, 我需要迴圈的呼叫兩個stored procedure, 各有各的引數, 按照ado.net的經驗, 需要parameters.clear(), 但是ado裡的parameters沒有clear這個介面, 看import進來的ado com的msado15.tli發現parameters裡有個delete方法, 嘗試用它吧, 確實可以用, 但是這個方法還是有其相當**的地方, 就是delete不存在的parameter會拋exception, 而且被delete過的parameter不能用了,需要重新呼叫command->createparameter()方法建立, 更sb的是這個delete用的引數index是引數名, 不是數字. 這兩個sb地方導致在每次迴圈都要command->createparameters和 parameters->delete. 雖然sb了些還算能用, 基本解決了我問題, 剩下的還有一絲擔心, ado這一堆的智慧型指標不會***有蝦公尺洩漏吧, 我的****ing service需要7*24-n (n<=4)的執行的. 不管了, 人家微軟都說了, smart pointer, 相信全是聰明人的微軟不會出那麼弱智的東西, 對付用吧.
param5 = conn->m_command->createparameter("@returnvalue", adinteger, adparamreturnvalue, 4);
//如果你需要sp的返回值, 呼叫execute的時候不要取recordset,
//如果取了recordset, 返回值永遠是0, 並且關閉這個recorderset的時候會丟擲exception
/*recordset = */conn->m_command->execute(null, null, adcmdstoredproc);
//delete引數的時候必須指定引數名, 而且delete之後這個引數就不能用了, 需要重新create.
//在同乙個command上呼叫其他sp之前,
//先把所有的parameter delete掉 //(不能迴圈, 因為delete的index不是數字是名字)
conn->m_command->parameters->delete("@pwd");
//這句**是我抄來的, 可以取得返回值
_variant_t ret_val = conn->m_command->parameters->getitem((long)0)->value;
ADO呼叫儲存過程
usingsystem usingsystem.collections.generic usingsystem.componentmodel usingsystem.data usingsystem.drawing usingsystem.linq usingsystem.text usingsys...
ADO呼叫儲存過程例項講解
1 直接有返回值的儲存過程 public string getprojectcode 或者直接以sql的形式呼叫 public string getprojectcode 呼叫無引數的儲存過程,直接呼叫儲存過程的返回值 public static datatable pro categorys pr...
ADO呼叫分頁查詢儲存過程
一 分頁儲存過程 使用儲存過程編寫乙個分頁查詢 set nocount off 關閉sqlserver訊息 set nocount on 開啟sqlserver訊息 gocreate proc usp getmystudentsdatabypage 輸入引數 pagesize int 7,每頁記錄條...