【发布时间】:2021-12-16 13:37:30
【问题描述】:
我有一个使用 Oracle 的云数据库,我正在尝试学习如何在 Windows 中的 c++ 应用程序中执行 SQL 命令。
这是我尝试过的。
1) 使用即时客户端 (OCCI)
- 我已尝试关注 Oracle 发布的这些 docs
- 我下载了instant client,解压后放到Oracle目录下
- 我下载了即时客户端的SDK并放在同一目录下
- 我下载了钱包文件,放到network/admin目录下
- 我将路径变量设置为目录 Oracle/instant_client 并创建了一个名为 ORACLE_HOME 的用户变量并将其设置为同一目录
- 创建了一个 TNS_ADMIN 用户变量并将其设置为 network/admin
- 创建了一个空的 Visual Studio 项目并将 sdk 添加到附加的包含依赖项中,并将 sdk 添加到项目属性下的附加库目录中
- 将 .lib 文件添加到项目属性下的附加依赖项(链接器 -> 输入)
- 然后我写了这段代码
Environment* env;
Connection* conn;
env = Environment::createEnvironment(Environment::DEFAULT);
conn = env->createConnection ("username", "password", "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=myserver111) (PORT=5521))(CONNECT_DATA = (SERVICE_NAME = bjava21)))");
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
- 成功编译、运行、构建环境,但尝试创建连接时出错
2) 使用 ODBC
- 已下载 ODBC Oracle 驱动程序
- 向系统 dsn 添加了新的数据源名称
- 测试连接成功
- 由于找不到有用且简单的文档来帮助我完成项目,因此放弃了努力
3) 使用适用于 Visual Studio 的 Oracle 开发人员工具
- 我下载了开发者工具并将它们添加到了 Visual Studio 中
- 使用 Server Explorer 连接到我的 Oracle 数据库
- 能够查看我的表和数据并使用服务器资源管理器对其进行修改
- 无法找到文档或无法添加允许我执行 SQL 查询的代码
更新
- 我已将 ORACLE_HOME 和 TNS_ADMIN 作为环境变量删除
- 我尝试使用 Instant Client SDK 连接到我的远程数据库,但没有成功
- 我尝试了以下方法,但没有任何效果
createConnection("username", "password", "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=myserver111) (PORT=5521))(CONNECT_DATA = (SERVICE_NAME = bjava21)))")
createConnection("username", "password", "//host:[port][/service name]")
createConnection("username", "password", "xxx_low")
createConnection("username", "password", "protocol://host:port/service_name?wallet_location=/my/dir&retry_count=N&retry_delay=N")
createConnection("username", "password", "username/password@xxx_low")
- 我能够以多种方式连接到 SQLPlus,但不能在我的 C++ 应用程序中
调试时出错:
exe 中未处理的异常:Microsoft C++ 异常:内存位置的 oracle::occi::SQLException
完整代码
#include <occi.h>
using namespace oracle::occi;
int main() {
Environment* env;
Connection* conn;
env = Environment::createEnvironment(Environment::DEFAULT);
conn = env->createConnection("username", "password", "(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=myserver111) (PORT=5521))(CONNECT_DATA = (SERVICE_NAME = bjava21)))");
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
return 0;
}
【问题讨论】:
标签: c++ oracle visual-studio occi