Hi,
Below code works fine for SQL Server provider. When i run same code
with OraOleDB provider program fails. Can you please let me know what
can be problem.
Command use for Oracle provider
-----------------------------------------------
COleDbCommand cmd;
cmd.ExecuteNonQuery(m_session, _T("{ CALL
SP_TEST(?) }"));
Stored procedure use for Oracle Provider
-------------------------------------------------------
CREATE OR REPLACE PROCEDURE "SP_TEST" (text OUT VARCHAR2)
IS
BEGIN
text := 'abcd';
END;
------------------------SQL SERVER code which is running
successfully------------------
SQL Server Stored procedure was defined as below:
~~~~~~~~~~~~~~~~~~~~~~~~~~~
ALTER PROCEDURE dbo.SP_TEST
@strText VARCHAR(100) OUTPUT
AS
BEGIN
set @strText= 'abcd';
END;
~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include "stdafx.h"
#define CHECK_HR if (FAILED(hr)) return hr
class COleDbCommand : public CCommand<CDynamicParameterAccessor,
CRowset, CMultipleResults>
{
public:
HRESULT ExecuteNonQuery(CSession &session, LPCTSTR szCommand,
DBROWCOUNT *pRowsAffected = 0)
{
HRESULT hr = S_OK;
hr = Create(session, szCommand); CHECK_HR;
hr = Prepare(); CHECK_HR;
void* pDummy;
hr = BindParameters(&m_hParameterAccessor, m_spCommand,
&pDummy);
CHECK_HR;
hr = Open(NULL, pRowsAffected); CHECK_HR;
return hr;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
::CoInitialize(NULL);
{
CDataSource db;
HRESULT hr = db.OpenFromInitializationString(L"XXXXX");
if (FAILED(hr))
return -1;
CSession m_session;
hr = m_session.Open(db);
COleDbCommand cmd;
cmd.ExecuteNonQuery(m_session, _T("{ ? = CALL
dbo.SP_TEST(?) }"));
CStringA str;
cmd.GetParamString((ULONG)2, str);
_putts(CA2T(str));
m_session.Close();
db.Close();
}
::CoUninitialize();
return 0;
}
Thank in advance,
Vijay Singh