C语言ODBC方式连接DM数据库

C语言ODBC方式连接DM数据库

一、安装 UNIX ODBC

  1. 下载 unixODBC 和 unixODBC-devel
  2. 安装 unixODBC 和 unixODBC-devel。

在这里插入图片描述

[root@RS1821 wt]# rpm -ivh unixODBC-devel-2.3.1-14.el7.x86_64.rpm unixODBC-2.3.1-14.el7.x86_64.rpm
warning: unixODBC-devel-2.3.1-14.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:unixODBC-2.3.1-14.el7            ################################# [ 50%]
   2:unixODBC-devel-2.3.1-14.el7      ################################# [100%]
[root@RS1821 wt]#
  1. 查看安装结果
[root@RS1821 odbc]# odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

二、配置 DM 数据源

1. 配置 /etc/odbcinst.ini

## 配置 /etc/odbcinst.ini 文件,在 odbcinst.ini 文件中添加以下信息:
[root@RS1821 odbc]# vim odbcinst.ini
[DM8 ODBC DRIVER]
Description = DM ODBC DRIVER FOR DM8
Driver      = /opt/dm8/bin

注意

/opt/dm8/bin 对应 $DM_HOME/bin 。

2. 配置 /etc/odbc.ini 文件

配置 /etc/odbc.ini 文件,在 odbc.ini 文件中添加以下信息:
[DM]
DRIVER = DM8 ODBC DRIVER
SERVER = 192.168.104.21
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236

三、gcc 环境检查

gcc --version

 执行结果如下:
[root@localhost odbctest]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

四、编写makefile

新建 makefile 脚本如下

文件中 odbc_conn.c 是 C的代码注意替换自己的

有的时候linux系统不同 分隔符会有差别导致编译不过去

CC=gcc

includepath=$(DM_HOME)/include
libpath=$(DM_HOME)/bin
vpath=./

CFLAGS=-I$(includepath) -DDM64 -Wall
LINKFLAGS=-L$(libpath) -ldodbc -Wall -Wl,-rpath $(libpath)

%.o:%.c
	$(CC) -g -c $(CFLAGS) $< -o $@

object_file1=odbc_conn.c
object_files=odbc_conn.c

final_objects=odbc_conn

all : $(final_objects)

.PHONY : all clean rebuild

odbc_conn : $(object_file1)
	$(CC) -o $@ $(object_file1) -g $(LINKFLAGS)
	@echo make ok.
clean :
	@rm -rf $(object_files)
	@rm -rf $(final_objects)

rebuild : clean all

五、编写c代码

新建文件名odbc_conn.c文件,内容如下

#include <stdio.h>
#include <stdlib.h>
#include <sql.h>
#include <sqltypes.h>
#include <sqlext.h>

/* 检测返回代码是否为成功标志,当为成功标志返回 TRUE,否则返回 FALSE */
#define RC_SUCCESSFUL(rc) ((rc) == SQL_SUCCESS || (rc) == SQL_SUCCESS_WITH_INFO)
/* 检测返回代码是否为失败标志,当为失败标志返回 TRUE,否则返回 FALSE */
#define RC_NOTSUCCESSFUL(rc) (!(RC_SUCCESSFUL(rc)))

HENV henv;/* 环境句柄 */
HDBC hdbc;/* 连接句柄 */
HSTMT hsmt;/* 语句句柄 */
SQLRETURN sret; /* 返回代码 */

int main(void)
{
	/* 申请一个环境句柄 */
	SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
	/* 设置环境句柄的 ODBC 版本 */
	SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,
		SQL_IS_INTEGER);
	/* 申请一个连接句柄 */
	SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

	sret = SQLConnect(hdbc, (SQLCHAR *)"DM", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS);
	if (RC_NOTSUCCESSFUL(sret)) {
		/* 连接数据源失败! */
		printf("odbc: fail to connect to server!\n");
		SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
		SQLFreeHandle(SQL_HANDLE_ENV, henv);
		exit(0);
	}
	printf("odbc: connect to server success!\n");

	/* 断开与数据源之间的连接 */
	SQLDisconnect(hdbc);
	/* 释放连接句柄 */
	SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
	/* 释放环境句柄 */
	SQLFreeHandle(SQL_HANDLE_ENV, henv);

	return 0;
}


六、编译并执行

在这里插入图片描述

## 1. 执行make 编译脚本会自动编译c代码
[dmdba@RS1821 odbctest]# make
## 2. 执行
[dmdba@RS1821 odbctest]# ./odbc_conn
odbc: connect to server success!

注意事项

建议使用dmdba用户执行,并且环境变量需要配置path的环境变量如下,否则执行make失败

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/data/dmdbms/bin"
export DM_HOME="/data/dmdbms"
export PATH=$PATH:/data/dmdbms/bin

参考

https://eco.dameng.com/docs/zh-cn/app-dev/c_c++_odbc.html

Q&A

1. Faild dependencied: libltdl.so7()

在这里插入图片描述

## 如果下载不下 就直接用下面的包  
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm      
rpm -ivh libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm      

在这里插入图片描述

资料

链接:https://pan.baidu.com/s/1UhSwIbKqO6jh0iy6PEWqHg

提取码:l5zv

–来自百度网盘超级会员V3的分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值