Я новичок в программировании сокетов, и у нас есть работающее клиентское приложение MFC по сети, сокет которого по какой-то причине прерывается периодически, по крайней мере, один раз в день. Это не проблема с сетью, потому что другие сетевые приложения работают просто отлично. Однако я заметил кое-что в журналах, что ошибка базы данных происходит более или менее за 10 минут до отключения сокета. Что-то вроде :
DB ERROR: ADO Error 1 (s)
select l.LABOID, l.LABOCODE, l.LABOCREDATE, l.LABOTEXT, l.SHORTTEXT, l.LISACCOUNTINGMODE, l.ADDRESS1, l.ADDRESS2, l.POSTALCODE, l.CITY, l.STATE, l.COUNTRY, the . TELEPHON, l.FAX, l.EMAIL, l.TELEPHON2, l.NATIONALCODE, l.FIRSTITEMID, l.ALTERNATECODE, l.LABOSERVICEID, l.STARTVALIDDATE, l.ENDVALIDDATE, l.LOGUSERID, l.LOGDATE, b.DICBINARYID , b.OBJECTLINK, b.OBJECTTYPE, b.DICBINARYTYPE, b.BINARYDATE, b.BINARYMIMETYPE, b.BINARYSIZE, b.LOGUSERID, b.LOGDATE, b.BINARYOBJECT, (select count (*) from d DICT_LABO_TO_DEVICE Where l.LABOID = d.LABOID) as NB_DEVICES from DICT_LABORATORIES l, b DICT_BINARY_DATA Where l.ENDVALIDDATE is null and l.LABOCODE like '%%' and l.LABOID b.OBJECTLINK = (+) and b.DICBINARYTYPE (+) = 1 and b . OBJECTTYPE (+) = 7 AND LABOID IN (1) order by l.LABOCODE
ORA-00936: missing expression of
Error: 0x80040e14
В режиме отладки я обнаружил, что поток все еще работает, но сокет не подключен. Я не мог точно определить, что вызвало его отключение. Желательно ли оформить переподключение?
Вот блок кода:
if (m_pClientSocket->IsThreadStillRunning())
{
if(m_pClientSocket->m_boSocketConnected)
{
dwNbSent_L = *pdwBufferSize_P;
m_pClientSocket->Write(pbyBuffer_P, *pdwBufferSize_P);
iotResult_L = IOTRANS_RESULT_SUCCESS;
}
else
{
m_pobjSession->Write(MSG_ERROR,TRACE_LOW
,_T("%s Client socket is not connected")
,(LPCTSTR)m_strLastErrFunc);
iotResult_L = IOTRANS_RESULT_FAILED;
SetError(ERROR_SOCKET_NOT_CONNECTED, _T("Client socket is not connected"), m_strLastErrFunc);
}
}
Может кто-нибудь дать мне Jumpstart или список элементов, чтобы проверить, чтобы этого не случилось?
Это больше всего нравится не ошибка сети.
БД Oracle не может выполнить синтаксический анализ SQL-кода (что приводит к ошибке ORA-00938), верхний уровень ADO преобразует ошибку Oracle в ошибку ADO 0x80040e14, что просто означает «Команда содержала одну или несколько ошибок.».
Ожидается, что это ошибка в вашем приложении.
Что вы могли бы сделать, это:
Других решений пока нет …