我有一个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&“重试”计数=N和“重试”延迟=N“
创建连接(“用户名”、“密码”、“用户名”/[email protected]_low&引用;)
-
我可以以多种方式连接到SqlPlus,但在C++应用程序中不能使用
调试时出错:
< exe中未处理的异常:微软C++异常:Oracle::OCCI::SqLExcExt在内存位置
完整代码
#包括<;欧西h>;
使用名称空间oracle::occi;
int main(){
环境*env;
连接*连接;
env=Environment::createEnvironment(Environment::DEFAULT);
conn=env->;createConnection(";用户名";,";密码";,";(描述=(地址=(协议=tcp)(主机=myserver111)(端口=5521))(连接数据=(服务名称=bjava21)))";);
环境->;终端连接(conn);
环境:终端环境(env);
返回0;
}
一般来说,使用即时客户端:
- 不要把甲骨文放在家里。这可能有副作用
- 您不需要设置TNS_ADMIN,因为您将解压缩的网络文件放在默认目录中
对于云:
- 在应用程序中,使用tnsnames.ora文件中的一个网络别名(例如xxxx_low)。您可以看到描述符有额外的信息,而您的硬编码描述符缺少这些信息
ODBC将完全相同。一旦您将钱包文件提取到默认的network/admin子目录,您只需连接DB凭据并使用tnsnames.ora文件中的网络别名
更多信息请参阅我的博客文章“如何连接到Oracle自治云数据库”
官方文档使用Oracle数据库工具连接到自治数据库