当我尝试在Microsoft Visual Studio 2010上创建与Oracle OCCI 11g的连接时,我收到以下错误:
OracleOCCI.exe中0x005a79c9处的未处理异常:0xC0000005:访问冲突读取位置0x316c6561。
我的代码非常简单,如下所示:
class DMLDemo
{
private:
Environment *env;
Connection *conn;
Statement *stmt;
public:
DMLDemo (string user, string passwd, string db)
{
env = Environment::createEnvironment (Environment::DEFAULT);
if(env==nullptr)
cout << "Failure";
try
{
conn = env->createConnection (user, passwd, db);
}
catch (exception* e)
{
cout << "Error";
}
}
~DMLDemo ()
{
env->terminateConnection (conn);
Environment::terminateEnvironment (env);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
//01. Test Simple Connection
try
{
DMLDemo demo("scott","Michael1","");
}
catch (exception* e)
{
cout << e->what();
}
getche();
return 0;
}
我搜索了一些答案,似乎oracle dll版本和VC版本之间的兼容性出了问题。
任何有此解决方案的人?或者只是改为VS 2005?
答案 0 :(得分:0)
好的,最后我安装了VS 2008,代码运行正常。似乎2008年编译的Oracle DLL在VS2010中不起作用。
也许有一天,Oracle可以发布其VS2010 Dlls ......
答案 1 :(得分:0)
我一直在为Oracle 11g(11.2.0)32位数据库构建VS08和VS10接口。我发现在V9目录中提供的许多提供occi11x.dlls的站点,包括我自己的Oracle安装,都与VS08控制台应用程序不兼容。最后,我必须从公司的另一个位置向我提供经过测试的“黄金”二进制文件。一旦x86'gold'dll安装在控制台启动目录中,相同的代码就能正常运行。
我在VS10 occi11x.dlls中搜索相同的适用性。到目前为止我还没有找到它。环境创建后我遇到了类似的错误。有些dll允许我建立连接,但是当我尝试执行ResultSet-&gt; next()时,其他人甚至不允许我执行executeQuery()。我认为Oracle无法正确管理这一点。
'破碎的'VS08 dll有时会有正确的日期和文件大小作为'gold'dlls。也许内部搜索dll会发现哪些是可行的。
http://www.oracle.com/technetwork/database/occidownloads-083553.html是oracle用来提供与Visual Studio匹配的各种occll dll的站点。也许他们的VS12版本实际上与Oracle12c数据库更兼容。