// 宣告物件
_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...