SQLException 32104 in OCCI



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

我的代码:

#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编译:

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::occi::SQLException在调试时,它显示它是消息32104,我知道这意味着它无法获得错误。

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

如果有人能让我知道我做错了什么,我将不胜感激,因为我已经在互联网上搜索过了,试图弄清楚这一点。

编辑

我发现了这个错误,我没有从即时客户端移动所有的dll。我只包括了与库名称相对应的dll。我将ocijdbc21.dll、oranzsbb.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上运行,我可以远程连接到它。

所以我想明白了。我使用此命令进行cmake:
cmake --build . --target ALL_BUILD --config Debug

这个版本配置命令应该可以工作,因为我已经调试了程序:
cmake --build . --target ALL_BUILD --config Release

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

相关内容

  • 没有找到相关文章

最新更新