首页 > 数据库 >c++通过DPI连接达梦数据库

c++通过DPI连接达梦数据库

时间:2022-12-23 11:23:12浏览次数:52  
标签:rt err 句柄 数据库 c++ 达梦 DPI msg dpi

通过ODBC连接上数据库后,同事让我换内网电脑开发,又换了数据库给我,结果怎么都连不上数据库,又尝试了DPI连接达梦数据库的方式,连接上了,记录如下。

连接代码

#include "StdAfx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include "DPI.h"
#include "DPIext.h"
#include "DPItypes.h"

#define DM_SVR "10.1.30.53:5236"
#define DM_USER "SYSDBA"
#define DM_PWD "123456789"

dhenv henv; /* 环境句柄 */
dhcon hcon; /* 连接句柄 */
dhstmt hstmt; /* 语句句柄 */
dhdesc hdesc; /* 描述符句柄 */
DPIRETURN rt; /* 函数返回值 */

/******************************************************
Notes:
获取错误信息
*******************************************************/
void dpi_err_msg_print(sdint2 hndl_type, dhandle hndl)
{
    sdint4 err_code;
    sdint2 msg_len;
    sdbyte err_msg[SDBYTE_MAX];
    /* 获取错误信息集合 */
    dpi_get_diag_rec(hndl_type, hndl, 1, &err_code, err_msg, sizeof(err_msg), &msg_len);
    printf("err_msg = %s, err_code = %d\n", err_msg, err_code);
}
/*
入口函数
*/
int main(int argc, char *argv[])
{
    //连接数据库
    /* 申请环境句柄 */
    rt = dpi_alloc_env(&henv);
    /* 申请连接句柄 */
    rt = dpi_alloc_con(henv, &hcon);
    /* 连接数据库服务器 */
    rt = dpi_login(hcon, (sdbyte *)DM_SVR, (sdbyte *)DM_USER, (sdbyte *)DM_PWD);
    if(!DSQL_SUCCEEDED(rt))
    {
        dpi_err_msg_print(DSQL_HANDLE_DBC, hcon);
        return rt;
    }
    printf("dpi: connect to server success!\n");
    //断开数据库连接
    /* 断开连接 */
    rt = dpi_logout(hcon);
    if(!DSQL_SUCCEEDED(rt))
    {
        dpi_err_msg_print(DSQL_HANDLE_DBC, hcon);
      return rt;
    }
    printf( "dpi: disconnect from server success!\n" );
    /* 释放连接句柄和环境句柄 */
    rt = dpi_free_con(hcon);
    rt = dpi_free_env(henv);
    return rt;
}

安装达梦数据库后找到目录内的 drivers\dpi 文件夹

 

 inlcude 文件夹里是头文件,附加到程序里,链接库里加上 dmdpi.lib 文件,把其他dll文件跟程序的exe放在一起

头文件

 

  链接库

 

 

 

 动态库

其他数据库使用看如下网址,官方文档

DPI 接口 | 达梦技术文档 (dameng.com)

 

标签:rt,err,句柄,数据库,c++,达梦,DPI,msg,dpi
From: https://www.cnblogs.com/lely/p/17000279.html

相关文章

  • Intellij Java JNI 调用 C++
    也可以用JNA,但性能没有JNI 好。JNA的Demo没有做,可以参考(​​https://www.bilibili.com/video/BV1xU4y1F7Ep/?spm_id_from=autoNext​​)JNI 参考(​​https://www.runoob.......
  • 组合模式javac++
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合......
  • C++学习---cstdio的源码学习分析10-改变文件流文件流buffer函数setvbuf
    cstdio中的文件访问函数stdio.h中定义了一系列文件访问函数(fopen,fclose,fflush,freopen,setbuf,setvbuf),接下来我们一起来分析一下setvbuf对应的源码实现。-fopen:打开文件-......
  • 观察者模式——C++实现
    问题截图:当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。类图:  代码:#include<iostream>#includ......
  • 达梦统计信息收集 及获取真实执行计划
    1. 统计信息对执行计划的影响达梦数据库是基于代价的优化器,达梦数据库统计信息不准,会影响到执行计划的估算,导致SQL解析到错误的执行计划DROP TABLE IF EXISTS......
  • C++——拷贝构造和运算符重载
    1.拷贝构造函数1.值传递#include<iostream>usingnamespacestd;classdate{public:date(intyear=1,intmonth=1,intday=1)//全缺省构造{_year=year;......
  • redis c++接口
    redis接口redis是c语言写的,有c接口,无c++接口。在一个负载均衡服务器项目中,用过一个redis的c++接口类。简单粗暴上代码吧,需要的自行移植一下。/**redis_interface.cpp*Aut......
  • 快速阅读《QT5.9 c++开发指南》1
    目录:书共分为16章,每章涉及一个主题或Qt的功能模块,涵盖了Qt应用程序开发的主要功能模块。人民邮电出版社异步社区本书的页面提供的“样章下载”,可......
  • 值类型和引用类型详解(C++/C#混讲)
    作者在初学值类型、引用类型时就一头雾水,相信大部分人也是一样的,现在回过头来总结一下。说起值类型、引用类型这件事呀,那就得从头说起...首先,我们可以将程序运行......
  • 用c++代码实现golang里面的map数据类型
    因为之前写过一篇golang数据类型分析的文章。包含slice、map、channel等。想写一篇用其它语言实现golang数据类型的代码,于是选中map作为实验对象。笔者之前写过5年的c++,......