我尝试使用 VC++ MFC (Visual Studio 2012) 连接 oracle XE (11.2.0.2.0) 数据库。以下是 oracle 网站上给出的示例代码。
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 行,它工作正常。否则,它仅适用于一个循环 (i=1) 并显示正确的消息(仅 1 次)。之后,得到以下错误
0x51A4CCC8 (msvcp110d.dll) 处的第一次机会异常。选择中断后,它会转到文件 xutility 和 function
inline void _Container_base12::_Orphan_all()
- 如何解决这个错误?
- 通常使用 VC++ MFC 连接 oracle 的最佳实践是什么?
环境:
Windows 8.1 (64)
Oracle XE (11.2.0.2.0)
OCCI 库:Instant Client Package - SDK:用于使用 Instant Client 开发 Oracle 应用程序的附加头文件和示例 makefile 下载 Instantclient-sdk-nt-11.2.0.2。 0.zip
Visual Studio 2012(调试 - 配置)
编辑
在 getString() (varchar2 字段)的情况下引发此错误。当使用带有 getInt() 的整数字段时,它工作正常。