OCIInitialize problem
552864Apr 14 2007 — edited Apr 16 2007i write a class using c++ to mange the db connection,i use three class memeber of char[64] to store the dbname,dbuser,dbpassword,but after i call the OCIInitialize fucntion ,the class member dbname,dbuser,dbpassword become null
code :
init class members
strcpy(m_strNodeName,dbname);
strcpy(m_strUserName,dbuser);
strcpy(m_strPasswd,dbpasswd);
int CacheQuery::openDB()
{
m_nStatus = CONNECTION_STATUS_BAD;
// if( OCIEnvCreate(&p_env, OCI_THREADED|OCI_OBJECT, (dvoid *)0,0, 0, 0, (size_t) 0, (dvoid **)0) != OCI_SUCCESS)
// {
// return -1;
// }
if(OCIInitialize(OCI_THREADED ,0, 0, 0, 0)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIInitialize error!")
return -1;
}
if(OCIEnvInit( (OCIEnv **) &(p_env), OCI_DEFAULT, 0, 0 )!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIEnvInit error!")
return -1;
}
//at this point the members m_strNodeName,m_strUserName,m_strPasswd become null.............................
if (OCIHandleAlloc ((dvoid *)p_env, (dvoid **)&p_srv,
OCI_HTYPE_SERVER, 0, (dvoid **) 0)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIHandleAlloc error!")
return -1;
}
if(OCIHandleAlloc((dvoid *)p_env, (dvoid **) & (p_err), OCI_HTYPE_ERROR, 0, 0)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIHandleAlloc error!")
return -1;
}
if (OCIServerAttach (p_srv, p_err, (text *)m_strNodeName,
strlen (m_strNodeName), OCI_DEFAULT)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIServerAttach error!")
return -1;
}
if(OCIHandleAlloc(p_env, (dvoid **) & (p_svc), OCI_HTYPE_SVCCTX, 0, 0)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIHandleAlloc error!")
return -1;
}
if (OCIAttrSet ((dvoid *)p_svc, OCI_HTYPE_SVCCTX,
(dvoid *)p_srv, (ub4) 0, OCI_ATTR_SERVER, p_err)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIAttrSet error!")
return -1;
}
if (OCIHandleAlloc ((dvoid *)p_env, (dvoid **)&p_ses,
OCI_HTYPE_SESSION, 0, (dvoid **) 0)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIHandleAlloc error!")
return -1;
}
if (OCIAttrSet ((dvoid *)p_ses, OCI_HTYPE_SESSION,
(dvoid *)m_strUserName, (ub4)strlen(m_strUserName),
OCI_ATTR_USERNAME, p_err)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIAttrSet error!")
return -1;
}
if (OCIAttrSet ((dvoid *)p_ses, OCI_HTYPE_SESSION,
(dvoid *)m_strPasswd, (ub4)strlen(m_strPasswd),
OCI_ATTR_PASSWORD, p_err)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIAttrSet error!")
return -1;
}
if (OCISessionBegin (p_svc, p_err, p_ses,
OCI_CRED_RDBMS, OCI_DEFAULT)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCISessionBegin error!")
return -1;
}
if (OCIAttrSet ( (dvoid *)p_svc, OCI_HTYPE_SVCCTX,
(dvoid *)p_ses, (ub4) 0, OCI_ATTR_SESSION, p_err)!=OCI_SUCCESS)
{
//IMPERR(-1, "OCIAttrSet error!")
return -1;
}
m_nStatus = CONNECTION_STATUS_OK;
cout << "connect sucessfully" << endl;
return 0;
}
help me please ,thank you