ado執行儲存過程,需要用到_commandptr介面。
方法如下:
可將如下**段放在資料庫初始化連線中
_commandptr m_pcommand; // 定義_commandptr介面的操作物件
m_pcommand.createinstance(__uuidof(command)); // 建立例項
m_pcommand->activeconnection = m_pconnection; // 設定活動連線,m_pconnection是_connectionptr介面物件。
m_pcommand->commandtype = adcmdstoredproc; // 標記該操作為儲存過程
下邊的**段可以放在你的函式中
// 清除舊引數,否則會累加,影響再次呼叫,此處必須從後往前刪除
for (int i = m_pcommand->parameters->getcount()-1; i >=0; i--)
m_pcommand->parameters->release();
_parameterptr pparam;
pparam.createinstance(__uuidof(parameter));
cstring strvalue(_t("字串引數"));
pparam = m_pcommand->createparameter(_bstr_t(""
/*如果需要通過引數名稱檢索,可以傳入乙個名稱*/), advarwchar, adparaminput, strvalue.getlength());// 建立乙個字串引數
pparam->value = _variant_t(strvalue);
int nvalue = *(int*)(_list[i].pvalue.get());
pparam = m_pcommand->createparameter(_bstr_t(""), adinteger, adparaminput, sizeof(int)); // 建立乙個int引數
pparam->value = _variant_t(nvalue);
double dvalue = *(double*)(_list[i].pvalue.get());
pparam = m_pcommand->createparameter(_bstr_t(""), addouble, adparaminput, sizeof(double));
pparam->value = _variant_t(dvalue);
m_pcommand->commandtext = _bstr_t("儲存過程名稱"); // 儲存過程名
m_pcommand->execute(null, null, adcmdstoredproc); // 執行儲存過程
基本上就是這樣了。需要注意的地方就是清除舊引數那裡。費了不少功夫才發現要清除舊引數,否則執行結果混亂不堪,最重要的是清除舊引數時必須由後往前刪除,否則刪除過程比較詭異。當然**要用try catch塊包裹,以便處理com異常。 vc 中,ado執行sql server儲存過程
variant t recordsaffected string szsql string p ks adduser m szname m szpasswd trycatch com error e catch com error e 必須指定執行sql語句的commandtype是adcmdsto...
VC中使用ADO呼叫儲存過程
2.為了使我們的呼叫儲存過程的例子有更多的通用性,我建了有輸入引數,有輸出引數,有乙個返回記錄集,有乙個返回值的儲存過程,如下 create procedure sp 1 pin1 int pin2 char 10 pout1 int output,pout2 char 10 output as b...
ADO教程(執行帶引數儲存過程)
由於最近專案上要使用ado訪問資料庫,而網上又沒有非常完整的帖子,乾脆摸著石頭過河來總結乙個ado的使用 首先不得不說ado的使用率並不是很高 1.ado是微軟提供的訪問各種資料庫的統一介面,是對底層的com技術ole db的封裝 它的主要優點是易於使用,高速度,低記憶體開銷,和乙個小磁碟占用,缺點...