c++中怎么调用oracle的存储过程? 有人用过吗?能否指导下我?多谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给段vc的ado代码,可以参考一下 _CommandPtr pCmdChange = NULL; pCmdChange.CreateInstance(__uuidof(Command)); pCmdChange->CommandType = adCmdStoredProc; pCmdChange->CommandText = "pkg_test.get"; pCmdChange->ActiveConnection = theApp.m_pConnection; m_pRecordset->CursorType=adOpenStatic; m_pRecordset->LockType=adLockPessimistic; m_pRecordset = pCmdChange->Execute(NULL,NULL,adCmdStoredProc); BCB里有专门的执行对象。TADOStoredProc *ADOStoredProc1;用TADOCommand 也可以的。 那也不要紧啊。一定有提供的数据库访问对象的啊。即使没有直接执行存储过程的对象,也至少会有执行command的对象。你查一下看看。 使用VC调用ORACLE的存储过程并返回记录 m_pConnection.CreateInstance("ADODB.Connection"); /******************连接数据库********************/ try { m_pConnection->ConnectionTimeout = 8; //连接SQL SERVER //m_pConnection->Open("Driver=SQL Server;Database=test;Server=127.0.0.1;UID=sa;PWD=;","","",adModeUnknown); //连接ACCESS2000 //m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=userinfo.mdb","","",adModeUnknown); //连接到oracleMSDAORA oraoledb.oracle m_pConnection->Open("Provider=oraoledb.oracle;Data Source=ep;User ID=zongdui;Password=zongdui;PLSQLRSet=1","","",adModeUnknown); } catch(_com_error e)///捕捉异常 { AfxMessageBox("数据库连接失败!"); return FALSE; } /**********************************************/上面是连接数据库,PLSQLRSet=1这个一定要有。 m_bNewUser = FALSE; m_pRecordset.CreateInstance("ADODB.Recordset"); try { //m_pRecordset->Open("SELECT name as username,old,photo as photo1 FROM test",_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenStatic,adLockPessimistic,adCmdText); _CommandPtr pCmdChange = NULL; // _ParameterPtr pprmByRoyalty = NULL; pCmdChange.CreateInstance(__uuidof(Command)); pCmdChange->CommandType = adCmdStoredProc; pCmdChange->CommandText = "pkg_test.get"; //Define Integer/variant. // pprmByRoyalty.CreateInstance(__uuidof(Parameter)); // VARIANT vtRoyalty; // vtRoyalty.vt = VT_I2; // vtRoyalty.iVal = 20; // pprmByRoyalty = pCmdChange->CreateParameter("param1",adInteger,adParamInput,sizeof(int),vtRoyalty); // pCmdChange->Parameters->Append(pprmByRoyalty); // pprmByRoyalty->Value = vtRoyalty; //Create Recordset by executing the command pCmdChange->ActiveConnection = theApp.m_pConnection; //Create Recordset by executing the command m_pRecordset->CursorType=adOpenStatic; m_pRecordset->LockType=adLockPessimistic; m_pRecordset = pCmdChange->Execute(NULL,NULL,adCmdStoredProc); //m_pRecordset->Open("{CALL (?{20})}",_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenStatic,adLockPessimistic,adCmdStoredProc); /**/ } catch (_com_error e) { AfxMessageBox(e.Description()); return FALSE; }这样就可以得到pkgtest.get返回的记录集 BCB里有TADOCommand 控键可以的。专门用来存储过程之类 Windows下的BCB有组件可以完成,VC可以调用COM接口来实现。但unix下就不懂了。 EXEC SQL EXECUTE BEGIN …… procedures.get(:var); END;END_EXEC; Unix是不太懂。不过我还没见过哪个开发工具不提供访问数据库的方法。好好找找吧。 小问题.! 看看你能用几种办法解决 救命了: 主键 和 主属性 问题?? 请教!这个SQL怎么写? 帮忙解决oracle提示数据库未打开? 一个我装的ORACLE捆扰了我N天的问题 如何只比较date字段的月日组合大小,而不考虑年的成分? oracle9i client连接服务器的问题 ROWid释疑? 求PL/SQL DEVELOPER 使用文档 Oracle8跟8i有什么区别?oracle9又有什么新的优点? sqlldr出错 找高手--如何在存储中动态调用FUNCTION
_CommandPtr pCmdChange = NULL; pCmdChange.CreateInstance(__uuidof(Command));
pCmdChange->CommandType = adCmdStoredProc;
pCmdChange->CommandText = "pkg_test.get";
pCmdChange->ActiveConnection = theApp.m_pConnection; m_pRecordset->CursorType=adOpenStatic;
m_pRecordset->LockType=adLockPessimistic;
m_pRecordset = pCmdChange->Execute(NULL,NULL,adCmdStoredProc);
也至少会有执行command的对象。你查一下看看。
m_pConnection.CreateInstance("ADODB.Connection");
/******************连接数据库********************/
try
{
m_pConnection->ConnectionTimeout = 8;
//连接SQL SERVER
//m_pConnection->Open("Driver=SQL Server;Database=test;Server=127.0.0.1;UID=sa;PWD=;","","",adModeUnknown);
//连接ACCESS2000
//m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=userinfo.mdb","","",adModeUnknown);
//连接到oracleMSDAORA oraoledb.oracle
m_pConnection->Open("Provider=oraoledb.oracle;Data Source=ep;User ID=zongdui;Password=zongdui;PLSQLRSet=1","","",adModeUnknown); }
catch(_com_error e)///捕捉异常
{
AfxMessageBox("数据库连接失败!");
return FALSE;
}
/**********************************************/上面是连接数据库,PLSQLRSet=1这个一定要有。 m_bNewUser = FALSE;
m_pRecordset.CreateInstance("ADODB.Recordset");
try
{
//m_pRecordset->Open("SELECT name as username,old,photo as photo1 FROM test",_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenStatic,adLockPessimistic,adCmdText);
_CommandPtr pCmdChange = NULL;
// _ParameterPtr pprmByRoyalty = NULL; pCmdChange.CreateInstance(__uuidof(Command));
pCmdChange->CommandType = adCmdStoredProc;
pCmdChange->CommandText = "pkg_test.get";
//Define Integer/variant.
// pprmByRoyalty.CreateInstance(__uuidof(Parameter));
// VARIANT vtRoyalty;
// vtRoyalty.vt = VT_I2;
// vtRoyalty.iVal = 20;
// pprmByRoyalty = pCmdChange->CreateParameter("param1",adInteger,adParamInput,sizeof(int),vtRoyalty);
// pCmdChange->Parameters->Append(pprmByRoyalty); // pprmByRoyalty->Value = vtRoyalty;
//Create Recordset by executing the command
pCmdChange->ActiveConnection = theApp.m_pConnection; //Create Recordset by executing the command
m_pRecordset->CursorType=adOpenStatic;
m_pRecordset->LockType=adLockPessimistic;
m_pRecordset = pCmdChange->Execute(NULL,NULL,adCmdStoredProc);
//m_pRecordset->Open("{CALL (?{20})}",_variant_t((IDispatch *)theApp.m_pConnection,true),adOpenStatic,adLockPessimistic,adCmdStoredProc);
/**/
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
return FALSE;
}这样就可以得到pkgtest.get返回的记录集
BEGIN
……
procedures.get(:var);
END;
END_EXEC;