在VC中如何實現對儲存過程的迴圈呼叫?

2021-09-30 02:17:23 字數 1702 閱讀 7316

// 宣告物件

_connectionptr  conn1;

_commandptr cmd1;

_recordsetptr  rs1;

_parameterptr  param;

// 初始化

::coinitialize(null);

param.createinstance("adodb.parameter");

hresult hr = cmd1.createinstance(__uuidof(command));

if(failed(hr))

cstring strsqlstore;  // 組織sql語句

strsqlstore ="update "+strtablename   +" set gwerrorcode=93 where usernumber = paramusernumber; ";

// 實現在程式中建立儲存過程

_bstr_t bstrcreate( 

l"create  or replace procedure  updatedb ( paramusernumber  varchar2)   "

l" as "

l" begin "

+strsqlstore+

l" commit; end ;");

_bstr_t  bstrsp(l"updatedb" );

m_pcon->execute(bstrcreate,null,adcmdtext);

//m_pcon->execute(bstrcreate,&recordsetaffected,amdtext);

// 關聯連線,m_pcon是_connectionptr 型別的已有的活動連線

cmd1->activeconnection =  m_pcon;

cmd1->commandtex  =  bstrsp;

cmd1->commandtype = adcmdstoredproc;

// 迴圈執行儲存過程

cstring strsql;

while(lineno)

if(m_bexit)

if(m_bstop)

sleep(1);

if(idyes == messagebox("是否暫停執行儲存過程?"提示",mb_yesno+mb_iconquestion))

return;

}// 每一行的資訊,代表了要查詢的入口引數的值

lineinfo = linearray[lineno];

lineinfo.number = l"'"

+lineinfo.number+

l"'"; // 引數格式化

// 引數賦值

//cmd1->getprepared();

test = lineinfo.number;

vartemp.vt = vt_bstr;

vartemp.bstrval = (_bstr_t)test;

cmd1->parameters->item[(short)0]->value  = vartemp.bstrval;

// 執行儲存過程

cmd1->execute(null, null, adcmdstoredproc);

trylineno++;

m_progressctrl.setpos(lineno);

}

在儲存過程中實現事務

在圖書館管理系統中系統管理員可以進行的操作有 借 還 新增 刪除 修改圖書或新增 刪除 修改讀者等,很多的操作都涉及到多個表的進行,我們一定要保持資料的一致性。如 刪除讀者 操作,會在讀者表 reader 中進行讀者的刪除,該讀者刪除後,借書表 reader book 也沒有必要再保留該讀者的借書記...

在VC 程式中顯示儲存過程的執行進度

網上查了不少文章,要想在程式中顯示儲存過程的進度還是有些困難,只能變通一下了。原理 在儲存過程中自己估算執行的程序,比如儲存過程需要執行100次資料插入操作,那麼基本上每執行一次插入語句儲存過程就執行了1 然後想辦法把這個百分比傳遞出去就行了。傳遞也沒想到什麼好辦法,就在資料庫中建個進度表,兩個字段...

動態sql在儲存過程中的實現

這種情況下,如何轉為儲存過程呢?以上面的兩個動態為例,在儲存過程中實現如下 create or replace procedure my procedure1 tablename in varchar2,studentname in varchar2,my cursor1 out my proced...