如何在C++应用程序中连接到Oracle云数据库?

我有一个Oracle的云数据库,我正在尝试学习如何在Windows中的C++应用程序中执行SQL命令。

这是我试过的

1)使用即时客户端(OCCI)

  • 我试着跟踪Oracle发布的这些文档
  • 我下载了instant client,解压缩后,将其放在名为Oracle的目录下
  • 我下载了instant client的SDK,并将其放在同一目录下
  • 我下载了钱包文件并将它们放在network/admin目录下
  • 我将path变量设置为目录Oracle/instant\u client,并创建了一个名为Oracle\u HOME的用户变量,并将其设置为同一目录
  • 创建了TNS_ADMIN用户变量并将其设置为network/ADMIN
  • 创建了一个空的visual studio项目,并将sdk添加到附加的包含依赖项中,并将sdk添加到项目属性下的附加库目录中
  • 将.lib文件添加到项目属性(链接器->输入)下的其他依赖项中
  • 然后我写了这个代码
环境*env;
连接*连接;
env=Environment::createEnvironment(Environment::DEFAULT);
连接=环境->createConnection(“用户名”、“密码”、“描述=(地址=(协议=tcp)(主机=myserver111)(端口=5521))(连接数据=(服务名称=bjava21)));
环境->终端连接(conn);
环境:终端环境(env);
  • 它成功编译、运行和构建环境,但在尝试创建连接时出错

2)使用ODBC

  • 下载了ODBC Oracle驱动程序
  • 向系统dsn添加了新的数据源名称
  • 已成功测试连接
  • 放弃努力,因为我找不到有帮助的简单文档来帮助我完成我的项目

3)使用Oracle Developer Tools for Visual Studio

  • 我下载了开发人员工具并将它们添加到VisualStudio中
  • 使用服务器资源管理器连接到我的Oracle数据库
  • 能够查看我的表和数据,并使用服务器资源管理器修改它们
  • 找不到文档或无法添加允许我执行SQL查询的代码

更新

  • 我已经删除了ORACLE_HOME和TNS_ADMIN作为环境变量
  • 我曾尝试使用即时客户端SDK连接到远程数据库,但没有成功
  • 我尝试了以下方法,但没有任何效果
createConnection(“用户名”、“密码”和“(说明=(地址=(协议=tcp)(主机=myserver111)(端口=5521))(连接数据=(服务=bjava21)))”
createConnection(“用户名”、“密码”、“主机:[端口][服务名称]”)
createConnection(“用户名”、“密码”、“xxx低”)
createConnection(“用户名”、“密码”、“密码”);protocol://host:port/service_name?wallet_location=/my/dir&amp“重试”计数=N和“重试”延迟=N“
创建连接(“用户名”、“密码”、“用户名”/[email protected]_low&引用;)
    我可以以多种方式连接到SqlPlus,但在C++应用程序中不能使用

调试时出错:

< exe中未处理的异常:微软C++异常:Oracle::OCCI::SqLExcExt在内存位置

完整代码

#包括&lt;欧西h&gt;
使用名称空间oracle::occi;
int main(){
环境*env;
连接*连接;
env=Environment::createEnvironment(Environment::DEFAULT);
conn=env-&gt;createConnection(&quot;用户名&quot;,&quot;密码&quot;,&quot;(描述=(地址=(协议=tcp)(主机=myserver111)(端口=5521))(连接数据=(服务名称=bjava21)))&quot;);
环境-&gt;终端连接(conn);
环境:终端环境(env);
返回0;
}

一般来说,使用即时客户端:

  • 不要把甲骨文放在家里。这可能有副作用
  • 您不需要设置TNS_ADMIN,因为您将解压缩的网络文件放在默认目录中

对于云:

  • 在应用程序中,使用tnsnames.ora文件中的一个网络别名(例如xxxx_low)。您可以看到描述符有额外的信息,而您的硬编码描述符缺少这些信息

ODBC将完全相同。一旦您将钱包文件提取到默认的network/admin子目录,您只需连接DB凭据并使用tnsnames.ora文件中的网络别名

更多信息请参阅我的博客文章“如何连接到Oracle自治云数据库”

官方文档使用Oracle数据库工具连接到自治数据库

发表评论