0
UPDATE XXXX將狀態設置=:1,其中ar_index =:2
//Allocate & initialize statement handle
if (OCIHandleAlloc ((dvoid *)m_pOCIEnv,
(dvoid **)&m_pOCIStmt,
OCI_HTYPE_STMT,
(size_t)0,
(dvoid **)0) == OCI_ERROR)
{
strErrMsg = _T("Failed to allocate & initialize the statement handle : OCIHandleAlloc() failed");
AfxMessageBox(strErrMsg.GetString());
LOG_ALL(strErrMsg.GetString());
return false;
}
//prepare SQL statement for execution.
if (OCIStmtPrepare(m_pOCIStmt,
m_pOCIErr,
pSqlStatement, //SQL statement
strlen((char*)pSqlStatement), //SQL statement length
(ub4) OCI_NTV_SYNTAX,
(ub4) OCI_DEFAULT) == OCI_ERROR)
{
strErrMsg = GetErrorMessage(m_pOCIErr);
LOG_ALL (strErrMsg.GetString());
return false;
}
if (OCIBindByPos(m_pOCIStmt,
&m_pOCIBind,
m_pOCIErr,
1,
(void*)&p,
(sword)sizeof(p),
SQLT_STR,
NULL, NULL, NULL, NULL, NULL, OCI_DEFAULT) == OCI_ERROR)
{
strErrMsg = (GetErrorMessage(m_pOCIErr));
LOG_ALL(strErrMsg.GetString());
return false;
}
if (OCIBindByPos(m_pOCIStmt,
&m_pOCIBind,
m_pOCIErr,
2,
(void*)&m_uiArIndexValue,
(sword)sizeof(m_uiArIndexValue),
SQLT_UIN,
NULL, NULL, NULL, NULL, NULL, (ub4)OCI_DEFAULT) == OCI_ERROR)
{
strErrMsg = (GetErrorMessage(m_pOCIErr));
LOG_ALL(strErrMsg.GetString());
return false;
}
//execute the SQL statement
if (OCIStmtExecute(m_pOCISvc,
m_pOCIStmt,
m_pOCIErr,
(ub4)3, //number of times this statement will be executing
(ub4)0,
NULL,
NULL,
(ub4)OCI_DEFAULT) == OCI_ERROR)
{
strErrMsg = GetErrorMessage(m_pOCIErr);
LOG_ALL(strErrMsg.GetString());
return false;
}
創建的語句句柄,準備語句,通過綁定列定位並執行失敗的查詢。
當OCIStmtExecute()
函數被調用時,控件正在消失,沒有返回任何值。 請讓我知道這個解決方案。
如果失敗,你會看到一個錯誤,那它是什麼?如果您沒有看到錯誤,那麼它不會失敗,那麼問題是什麼?在成功執行OCIStatementExecute調用後,您還沒有顯示任何內容 - 您期望發生什麼? (爲什麼它應該執行3次?) –
我修改了代碼,現在執行一次。我沒有收到任何錯誤或異常,但與此同時,數據庫中的值沒有得到更新。我的代碼中有任何問題,還是需要爲提交添加一些額外的代碼? – user3256190
你有什麼代碼後,你已經表明它已經超過了執行?明確提交是一個好主意;我不確定這是否會隱含提交或回滾。但它是否乾淨地退出,還是轉儲核心 - 你能檢查可執行文件的返回代碼嗎? –