1

我尝试使用 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()
  1. 如何解决这个错误?
  2. 通常使用 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() 的整数字段时,它工作正常。

4

0 回答 0