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()
- このエラーを解決するにはどうすればよいですか?
- 通常、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() で整数フィールドを使用すると、正常に動作します。