签到成功

知道了

CNDBA社区CNDBA社区

对达梦8 C语言支持

2022-02-18 11:32 1773 0 原创 达梦数据库
作者: franklin

一、说明
配置ODBC
配置好达梦数据源
/etc/odbcinst.ini的内容如下:
[DM8 ODBC DRIVER]
Description = DM ODBC DRIVER FOR DM8
Driver = /opt/dmdbms/bin

/etc/odbc.ini配置如下:
[DM]
DRIVER = DM8 ODBC DRIVER
SERVER = 192.168.0.140
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5236

二、生成Makefile文件
CC=gcchttps://www.cndba.cn/franklin/article/107743

includepath=$(DM_HOME)/include
libpath=$(DM_HOME)/bin
vpath=./https://www.cndba.cn/franklin/article/107743

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

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

https://www.cndba.cn/franklin/article/107743

object_file1=odbc_conn.o
object_file2=odbc_dml.o
object_file3=odbc_bind.o
object_file4=odbc_lob.o

object_files=odbc_conn.o odbc_dml.o odbc_bind.o odbc_lob.o

final_objects=odbc_conn odbc_dml odbc_bind odbc_lob

all : $(final_objects)

.PHONY : all clean rebuild

odbc_conn : $(object_file1)
$(CC) -o $@ $(object_file1) -g $(LINKFLAGS)
@echo make ok.

odbc_dml : $(object_file2)
$(CC) -o $@ $(object_file2) -g $(LINKFLAGS)
@echo make ok.

odbc_bind : $(object_file3)
$(CC) -o $@ $(object_file3) -g $(LINKFLAGS)
@echo make ok.

odbc_lob : $(object_file4)
$(CC) -o $@ $(object_file4) -g $(LINKFLAGS)
@echo make ok.

clean :
@rm -rf $(object_files)
@rm -rf $(final_objects)

rebuild : clean all

https://www.cndba.cn/franklin/article/107743

三、编辑运行文件
编译odbc_conn.c
#include
#include
#include
#include
#include

/* 检测返回代码是否为成功标志,当为成功标志返回 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 hstmt;/* 语句句柄 */
SQLRETURN sret; /* 返回代码 */https://www.cndba.cn/franklin/article/107743https://www.cndba.cn/franklin/article/107743https://www.cndba.cn/franklin/article/107743

int main(void)
{
int out_c1 = 0;
SQLCHAR out_c2[20]= { 0 };
SQLLEN out_c1_ind = 0;
SQLLEN out_c2_ind = 0;https://www.cndba.cn/franklin/article/107743

https://www.cndba.cn/franklin/article/107743

/* 申请句柄 */
SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
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 *)”SYSDBA123”, 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”);

/* 申请一个语句句柄 */
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

//清空表,初始化测试环境
sret = SQLExecDirect(hstmt, (SQLCHAR *) “delete from PRODUCTION.PRODUCT_CATEGORY”, SQL_NTS);

//插入数据
sret = SQLExecDirect(hstmt, (SQLCHAR *) “insert into PRODUCTION.PRODUCT_CATEGORY(NAME) values(‘语文’), (‘数学’), (‘英语’), (‘体育’) “, SQL_NTS);
if (RC_NOTSUCCESSFUL(sret)) {
printf(“odbc: insert fail/n”);
}
printf(“odbc: insert success/n”);

//删除数据
sret = SQLExecDirect(hstmt, (SQLCHAR *) “delete from PRODUCTION.PRODUCT_CATEGORY where name=’数学’ “, SQL_NTS);
if (RC_NOTSUCCESSFUL(sret)) {
printf(“odbc: delete fail/n”);
}
printf(“odbc: delete success/n”);

//更新数据
sret = SQLExecDirect(hstmt, (SQLCHAR *) “update PRODUCTION.PRODUCT_CATEGORY set name = ‘英语-新课标’ where name=’英语’ “, SQL_NTS);
if (RC_NOTSUCCESSFUL(sret)) {
printf(“odbc: update fail/n”);
}
printf(“odbc: update success/n”);

//查询数据
SQLExecDirect(hstmt, (SQLCHAR ) “select from PRODUCTION.PRODUCT_CATEGORY”, SQL_NTS);
SQLBindCol(hstmt, 1, SQL_C_SLONG, &out_c1, sizeof(out_c1), &out_c1_ind);
SQLBindCol(hstmt, 2, SQL_C_CHAR, &out_c2, sizeof(out_c2), &out_c2_ind);https://www.cndba.cn/franklin/article/107743

printf(“odbc: select from table…/n”);
while(SQLFetch(hstmt) != SQL_NO_DATA)
{
printf(“c1 = %d, c2 = %s ,/n”, out_c1, out_c2);
}
printf(“odbc: select success/n”);

SQLFreeHandle(SQL_HANDLE_STMT, hstmt);

SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}

四、生成可执行文件
在当前目录下运行make编译生成odbc_conn.o 、odbc_dml.o 、odbc_conn、 odbc_dml 两个文件
直接运行odbc_dml

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
franklin

franklin

关注
  • 15
    原创
  • 0
    翻译
  • 1
    转载
  • 3
    评论
  • 访问:32871次
  • 积分:56
  • 等级:注册会员
  • 排名:第39名
精华文章
    最新问题
    查看更多+
    热门文章
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ