c++通过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)

 

达梦数据库查看字符集

SELECT '字符集',DECODE(UNICODE,'0','GB18030','1','UTF-8','2','EUC-KR');

--或者

SELECT '字符集',DECODE(SF_GET_UNICODE_FLAG(),'0','GB18030','1','UTF-8','2','EUC-KR');

需要特别说明,达梦数据库字符集在初始化数据库实例之后,在整个实例生命周期都不能更改。

「DM专栏」达梦数据库支持哪些字符集,不同字符集之间有何区别? (baidu.com)

posted @ 2022-12-23 11:10  yangly  阅读(1252)  评论(0编辑  收藏  举报