-2

私はソケットプログラミングに不慣れで、ネットワーク上で実行中のMFCクライアントアプリケーションがあり、そのソケットは何らかの理由で少なくとも1日に1回断続的に切断されます。他のネットワークアプリは正常に実行されているため、ネットワークに問題はありません。しかし、ログに何か気づきましたが、ソケットが切断される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);
    }
  }

誰かが私にこれが起こらないようにするためにチェックするためのジャンプスタートまたはアイテムのリストを与えることができますか?

4

1 に答える 1

1

これは、ネットワークエラーではなく、ほとんどの場合です。

Oracle DBはSQLステートメントを解析できません(エラーORA-00938が発生します)。最上位のADOレイヤーはOracleエラーをADOエラー0x80040e14に変換します。これは単に'コマンドに1つ以上のエラーが含まれていることを意味します。'。

これにより、アプリケーションにバグが発生することが予想されます。

あなたにできることは:

  • アプリケーションがSQLステートメントを作成する方法を確認(デバッグ)します。
  • データベースをチェックして、アプリケーションが認識していない変更(テーブル/ビューの削除または列の名前変更/削除)が適用されているかどうかを確認します。
于 2012-10-25T09:11:24.053 に答える