C语言ODBC方式连接DM数据库
一、安装 UNIX ODBC
- 下载 unixODBC 和 unixODBC-devel 。
- 安装 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]#
- 查看安装结果
[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的分享