if(OCIInitialize(OCI_THREADED ,0, 0, 0, 0)!=OCI_SUCCESS)
{
return -1;
}
if(OCIEnvInit( (OCIEnv **) &(p_env), OCI_DEFAULT, 0, 0 )!=OCI_SUCCESS)
{
return -1;
}
if (OCIHandleAlloc ((dvoid *)p_env, (dvoid **)&p_srv,
OCI_HTYPE_SERVER, 0, (dvoid **) 0)!=OCI_SUCCESS)
{
return -1;
}
if(OCIHandleAlloc(p_env, (dvoid **) & (p_err), OCI_HTYPE_ERROR, 0, 0)!=OCI_SUCCESS)
{
return -1;
}
if (OCIServerAttach (p_srv, p_err, (text *)strNodeName,
strlen (strNodeName), OCI_DEFAULT)!=OCI_SUCCESS)
{
return -1;
}
if(OCIHandleAlloc(p_env, (dvoid **) & (p_svc), OCI_HTYPE_SVCCTX, 0, 0)!=OCI_SUCCESS)
{
return -1;
}
if (OCIHandleAlloc ((dvoid *)p_env, (dvoid **)&p_ses,
OCI_HTYPE_SESSION, 0, (dvoid **) 0)!=OCI_SUCCESS)
{
return -1;
}
if (OCIAttrSet ((dvoid *)p_svc, OCI_HTYPE_SVCCTX,
(dvoid *)p_srv, (ub4) 0, OCI_ATTR_SERVER, p_err)!=OCI_SUCCESS)
{
return -1;
}
if (OCIAttrSet ((dvoid *)p_ses, OCI_HTYPE_SESSION,
(dvoid *)strUserName, (ub4)strlen(strUserName),
OCI_ATTR_USERNAME, p_err)!=OCI_SUCCESS)
{
return -1;
}
if (OCIAttrSet ((dvoid *)p_ses, OCI_HTYPE_SESSION,
(dvoid *)strPasswd, (ub4)strlen(strPasswd),
OCI_ATTR_PASSWORD, p_err)!=OCI_SUCCESS)
{
return -1;
}
if (OCISessionBegin (p_svc, p_err, p_ses,
OCI_CRED_RDBMS, OCI_DEFAULT)!=OCI_SUCCESS)
{
return -1;
}
if (OCIAttrSet ( (dvoid *)p_svc, OCI_HTYPE_SVCCTX,
(dvoid *)p_ses, (ub4) 0, OCI_ATTR_SESSION, p_err)!=OCI_SUCCESS)
{
return -1;
}
在用这段代码连接数据库,在数据库故障(个别故障)时,既不能建立连接,也不能返回错误,程序会卡住,此时,使用oracle的sqlplus去连接相应的数据库,现象一样。在这样的场景下,有没有办法设置超时,如果不能正常连接数据库,能够及时返回错误?如果可以,在这样的场景下,如何进行超时的设置?