vc中ADO執行儲存過程方法記錄

2021-07-30 21:29:48 字數 1558 閱讀 7374

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的封裝 它的主要優點是易於使用,高速度,低記憶體開銷,和乙個小磁碟占用,缺點...