当前位置: 首页 > news >正文

MFC C++ 使用ODBC方式调用Oracle数据库的详细步骤

1.下载oracle (这里使用的是win 32  21.18.0版本)

  • instantclient-basic-nt-21.18.0.0.0dbru.zip
  • instantclient-odbc-nt-21.18.0.0.0dbru.zip

2.安装oracle

  • 解压instantclient-basic-nt-21.18.0.0.0dbru.zip和instantclient-basic-nt-21.18.0.0.0dbru.zip

并将解压后的两个文件的instantclient_21_18合并,以管理员方式运行odbc_install.exe

  • 设置环境变量

  • .添加系统环境变量

变量名  ORACLE_HOME

变量值  D:\Tools\Oracle\instantclient_21_18

变量名TNS_ADMIN

变量值 %ORACLE_HOME%\network\admin

注意:此配置解决中文乱码问题

变量名 NLS_LANG

变量值AMERICAN_AMERICA.AL32UTF8

  • 添加用户变量

选中Path,双击

点击‘新建’,添加 %ORACLE_HOME%;%ORACLE_HOME%\bin; 

3.ODBC数据源配置

双击C:\Windows\SysWOW64下的‘odbcad32.exe

选择驱动程序,找到Oracle in instantclient_21_18,选中并点击‘确定

  • 切换到‘系统DSN’,点击‘添加’,选中Oracle in instantclient_21_18,点击‘完成

添加相关信息后,点击‘Test Connection’,测试是否能connect success,如图

5.修改tnsnames.ora文件

如instantclient_21_18\\network\admin目录下没有tnsnames.ora文件,则需要手动创建,设置实际的数据库的相关配置

ServerTest =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = cxx)(CHARACTERSET = AL32UTF8)))

参数解释:

ServerTest 对应ODBC数据源 中的TNS Service Name

6.查询环境变量是否设置成功

方法一:

echo %ORACLE_HOME%echo %TNS_ADMIN%echo %PATH%

7.C++ 调用Oracle

连接服务器,使用DSN,DATABASE,SERVER,UID,PWD连接

BOOL CDBOracleConnector::Connect(LPCTSTR lpszDSN, LPCTSTR lpszDatabase, LPCTSTR lpszServer, LPCTSTR lpszUser, LPCTSTR lpszPwd, int queryTimeout, int connectTimeout)
{Disconnect();m_strLastError = _T("");CString strConnect;strConnect.Format(_T("DSN=%s;DATABASE=%s;SERVER=%s;UID=%s;PWD=%s"), lpszDSN, lpszDatabase, lpszServer, lpszUser, lpszPwd);WriteLog(m_logPath, LOG_NAME, strConnect);try {m_db.SetLoginTimeout(connectTimeout);m_db.SetQueryTimeout(queryTimeout);//打开数据库连接LPCTSTR p = (LPCTSTR)strConnect;if (!m_db.OpenEx(strConnect, CDatabase::noOdbcDialog)){m_strLastError = _T("无法打开数据库连接");return FALSE;}}catch (CDBException* e) {m_strLastError = e->m_strError;e->Delete();WriteLog(m_logPath, LOG_NAME, m_strLastError);return FALSE;}return true;
}

查询

CString CDBOracleConnector::GetOperatorID(LPCTSTR lpszOperatorID, LPCTSTR lpszOperatorPwd)
{m_strLastError = _T("");try {CString strSQL;strSQL.Format(_T("select * from user_t ")_T(" where user_name='%s' ")_T("and password='%s'"),lpszOperatorID, lpszOperatorPwd);CString strLog;CRecordset rs(&m_db);rs.Open(CRecordset::forwardOnly, strSQL, CRecordset::readOnly);CString strStatus = _T("");if (!rs.IsEOF()) {rs.GetFieldValue(_T("ID"), strStatus);}rs.Close();return strStatus;}catch (CDBException* e) {m_strLastError.Format(_T("检查失败: %s"), e->m_strError);e->Delete();return _T("查询错误");}return 0;
}

以上就是详细的过程。

http://www.lryc.cn/news/617450.html

相关文章:

  • 重学React(五):脱围机制一
  • 金蝶云星辰:赋能企业数据管理
  • spring boot 整合redis教程
  • 带简易后台管理的米表系统 域名出售系统 自适应页面
  • 帝国理工学院团队研发:Missense3D-PTMdb—— 解析遗传变异与翻译后修饰的交互式工具
  • 计算机网络---交换机
  • 套接字技术、视频加载技术、断点续传技术
  • Horse3D引擎研发笔记(四):在QtOpenGL下仿three.js,封装EBO绘制四边形
  • 2025 年国内可用 Docker 镜像加速器地址
  • Rust面试题及详细答案120道(19-26)-- 所有权与借用
  • 《基于Pytorch实现的声音分类 :网页解读》
  • YOLOv8 训练报错:PyTorch 2.6+ 模型加载兼容性问题解决
  • 【JavaEE】(12) 创建一个 Sring Boot 项目
  • 第二届机电一体化、机器人与控制系统国际会议(MRCS 2025)
  • 34-Hive SQL DML语法之查询数据-3
  • 2025世界机器人大会,多形态机器人开启商业化落地浪潮
  • [4.2-2] NCCL新版本的register如何实现的?
  • GAI 与 Tesla 机器人的具体联动机制
  • 记录一下通过STC的ISP软件修改stc32的EEPROM值大小
  • VoxCraft-生数科技推出的免费3D模型AI生成工具
  • uni-app app端安卓和ios如何申请麦克风权限,唤起提醒弹框
  • 设计模式笔记_结构型_组合模式
  • 5G NTN 卫星测试产品
  • 5G NR 非地面网络 (NTN) 5G、太空和统一网络
  • 用Python实现Excel转PDF并去除Spire.XLS水印
  • 深度剖析 Linux 信号:从基础概念到高级应用,全面解析其在进程管理与系统交互中的核心作用与底层运行机制
  • 电力仿真系统:技术革新与市场格局的深度解析
  • 【CV 目标检测】①——目标检测概述
  • 【Oracle】如何使用DBCA工具删除数据库?
  • 低延迟RTSP|RTMP视频链路在AI驱动无人机与机器人操控中的架构实践与性能优化