1

VC++ MFC (Visual Studio 2012) を使用して oracle XE (11.2.0.2.0) データベースに接続しようとしました。以下は、オラクルのウェブサイトで提供されているサンプルコードです。

void CMFCOracleOCCIDlg::OnBnClickedOk()
{
    // TODO: Add your control notification handler code here
    const string userName = "<username>";
    const string password = "<password>";
    const string connectString = "";

    Environment *env = Environment::createEnvironment();
    {
       Connection *conn = env->createConnection(userName, password, connectString);
       Statement *stmt = conn->createStatement("SELECT * FROM tab");
       ResultSet *rs = stmt->executeQuery();
       for(int i=1;i<20;i++){
           rs->next();
           //Below are the commented 4 lines
           /*
           string s = rs->getString(1);
           CString str2(s.c_str());
           lstBox01.AddString(str2);
           MessageBox(str2);
           */
       }

       stmt->closeResultSet(rs);
       conn->terminateStatement(stmt);
       env->terminateConnection(conn);
    }
    Environment::terminateEnvironment(env);
}

上記のコードでは、4行がコメントされていますが、正常に動作します。それ以外の場合は、1 つのループ (i=1) に対してのみ機能し、適切なメッセージを表示します (1 回のみ)。その後、以下のエラーが発生します

0x51A4CCC8 (msvcp110d.dll) での初回例外。ブレークを選択すると、ファイル xutility と関数に移動します

inline void _Container_base12::_Orphan_all()
  1. このエラーを解決するにはどうすればよいですか?
  2. 通常、VC++ MFC を使用してオラクルに接続するためのベスト プラクティスは何ですか?

環境 :
Windows 8.1 (64)
Oracle XE (11.2.0.2.0)
OCCI ライブラリ : Instant Client パッケージ - SDK: Instant Client を使用して Oracle アプリケーションを開発するための追加のヘッダー ファイルとサンプル makefile instantclient-sdk-nt-11.2.0.2 をダウンロードします。 0.zip
Visual Studio 2012 (デバッグ - 構成)

編集
このエラーは、getString() (varchar2 フィールド) の場合に発生します。getInt() で整数フィールドを使用すると、正常に動作します。

4

0 に答える 0