首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OCCI中的SQLException 32104

OCCI中的SQLException 32104
EN

Stack Overflow用户
提问于 2022-04-07 15:10:21
回答 1查看 184关注 0票数 0

我试图使用OCCI将我的程序连接到oracle数据库,但是当我尝试使用SQLException 32104函数时,我得到了一个createEnvironment 32104。

我的代码:

代码语言:javascript
复制
#include <OpenXLSX.hpp>
#include <occi.h>
#include <string>

using namespace OpenXLSX;
using namespace oracle::occi;

int main() {

    std::string user = "";
    std::string pass = "";
    std::string conn_str = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.159)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=test)))";

    std::cout << "Initializing Database Connection ......" << std::endl;

    try {
        Environment* env = Environment::createEnvironment(Environment::DEFAULT);
        //Connection *conn = env->createConnection(user, pass ,conn_str);
    } catch(SQLException &e) {
        std::cout << "Error Message: " << e.getErrorCode() << std::endl;
        std::cout << e.getMessage() << std::endl;
    }
    std::cout << "Initializing Database Connection ......";
    

    std::cout << " OK" << std::endl;

    XLDocument doc;
    doc.open("Template.xlsx");
    auto wks = doc.workbook().worksheet("Extruder Data Log");

    int row_number = 4;
    char column_letter = 'A';
    char column_letter2 = 'A';
    std::string loc;

    loc = column_letter;
    loc += std::to_string(4);

    wks.cell(loc).value() = "Hello, OpenXLSX!";

    doc.save();
    //env->terminateConnection(conn);
    //Environment::terminateEnvironment(env);

    std::cout << "Program Terminated: Press Enter ...";
    std::string wait;
    std::cin >> wait;

    return 0;
}

我使用CMake编译:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.15)
project(Atlas)

set(CMAKE_CXX_STANDARD 17)

# Set the build output location to a common directory
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/output)
set(CMAKE_PREFIX_PATH ${CMAKE_CURRENT_SOURCE_DIR}/include/lib)

add_subdirectory(OpenXLSX)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/include/OpenXLSX/headers)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/include/OpenXLSX)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/include/OCCI)
link_directories(${CMAKE_PREFIX_PATH})
find_package(OpenXLSX REQUIRED)
find_library(OCCI NAMES oraocci21.lib oci.lib oramysql.lib oraocci21d.lib ociw32.lib)

add_executable(Atlas Atlas.cpp)
target_link_libraries(Atlas OpenXLSX::OpenXLSX)
target_link_libraries(Atlas ${OCCI})

输出目录中有dll,可执行文件和库最终输出到这个目录中。我认为它应该运行,但是我得到了一个Microsoft C++异常:oracle::SQLException,在调试时它显示了消息32104,我知道这意味着它无法获得错误。

Debug窗口显示它加载oraocci21.dll,但没有加载任何其他OCCI dll。

如果有人能让我知道我做错了什么,我会非常感激,因为我已经搜索了互联网,试图找出这一点。

编辑

发现这个错误后,我并没有从即时客户端移出所有的dll。我只包括与图书馆名称相对应的dll。我用我的可执行文件将ocijdbc21.dll、orannzsbb.dll和oraociicus.dll包含到文件夹中,它现在通过createEnvironment(Environment::DEFAULT)部分运行。

但是,使用此编辑,我现在遇到了错误24960,它说OCI_ATTR_USERNAME长度大于255,而它不是。如果有人能帮忙,请让我知道,但我希望其他遇到这个需要帮助的人看到关于dlls的部分。

如果这有助于回答我的问题,我正在使用即时客户端21_3和sdk 21_3,我也使用MSVC 16 2019年编译C++17作为C++的版本。我的Oracle数据库运行在19c上,我可以远程连接到它。

EN

回答 1

Stack Overflow用户

发布于 2022-04-08 17:31:21

所以我想明白了。我在cmake中使用了这个命令:

cmake --build . --target ALL_BUILD --config Debug

这个release命令应该可以工作,因为我已经调试了程序:

cmake --build . --target ALL_BUILD --config Release

由于某些原因,我只能假设OCCI不喜欢我的调试器版本或类似的东西。如果有人能评论为什么会发生这种情况,我想知道。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71784639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档