DCI 接口关于 LOB 字段示例
LOB 方法:
- OCILobGetLength
*用途:*返回大字段的长度,按字节计算。 |
- OCILobRead
*用途:*读取某个大字段中指定长度的内容。 |
未发现数据源名称并且未指定默认驱动程序
【问题描述】:
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified.未发现数据源名称并且未指定默认驱动程序。[ISQL] ERROR: Could not SQLConnect。
【解决方法】:
- 第一种原因:odbc.ini 配置文件本身有问题,比如名称有空格。(odbc.ini 和 odbcinst.ini 中每行开头禁止留有空格)
- 第二种原因:配置文件路径不对https://www.cndba.cn/dave/article/3846。
- /etc 下的 odbc.ini 文件,要是 linux 格式的文档。
- linux 上部署 ODBC 需要有 DM 数据库的驱动,要装一个 DM 数据库。
- 参考技术链接:https://mp.weixin.qq.com/s/cjKlLarr4arYV4WHWdd-jw。
DSN 中,驱动程序和应用程序之间的体系结构不匹配
【问题描述】:
“[Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配”)/ODBC 数据源管理程序里没找到 DM 驱动。
【解决方法】:
- Win64 位系统有两个 ODBC 数据源管理器,分别为 64 位和 32 位。
- 64 位 ODBC 数据源管理器路径是 C:\WINDOWS\system32\odbcad32.exe。
- 32 位 ODBC 数据源管理器路径是 C:\WINDOWS\SysWOW64\odbcad32.exe。
- Win64 位系统控制面板默认打开的 ODBC 数据源管理器是 64 位,在 Win64 系统安装 DM 版本后通过控制面板打开的 ODBC 数据源管理器发现找不到 ODBC 驱动,一般是由于安装的 DM 版本为 32 位,所以 64 位 ODBC 数据源管理器看不到,需要启动 32 位数据源管理器才可看到 ODBC 驱动。
- 64 位应用程序只能调用 64 位 ODBC 驱动;
- 32 位应用程序只能调用 32 位 ODBC 驱动;
- 64 位应用程序调用 32 位 ODBC 驱动或 32 位应用程序调用 64 位 ODBC 驱动,都会提示以下错误:
Error: [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配。
ODBC 连接 DM 数据库,提示加密模块加载失败
【问题原因】:
ODBC 接口调用依赖 libcrypt.so,程序执行时找不到 libcrypt.so。
【解决方法】:
检查 bin 目录下存在 libcrypt.so,以及设置环境变量 LD_LIBRARY_PATH 指向 dmdbms/bin 目录。
communication error
【问题描述】:
DM 数据库,MAX_SESSION=65000,在程序中没有设置 timeout 超时限制,C# 在插入数据库时会提示这个错误 communication error,循环插入前三万条可以,三万后就提示这个错误。
【解决方法】:
检查 MAX_SESSION_STATEMENT 参数,检查每次插入是否新开了一个句柄,通过 select MAX(N_USED_STMT) from v$sessions;进行查看。
通过指定字符集的字符串获取字符集的 ID
【问题描述】:
在进行对 DM 数据库编程时,使用 DM 的 DCI 用于兼容 Oracle 数据库的代码,在之前使用 Oracle 的 OCI 的编程的时候,可以通过 OCINlsCharSetNameToId 方法获取指定字符集的 id,現在在 DM 的 DCI 中未找到这个方法,在 DM 程序员手册也没有找到相关的 API 的说明。
【解决方法】:
因为 DM 没有 NlsCharSetName 这个方法。DM 可以使用 SQL 语句 select UNICODE ();来获取指定字符集的 id。如果有兼容性需求,可通过对应销售或技术提需求。
ODBC 连接 DM 数据库报错
【问题描述】:
ODBC 连接 DM 报错:can’t open lib’/opt/dmdbms/bin/libdodbc.so’:file not found 或者找不到.so 文件 error:could not SQLConnect。
【解决方法】:
ldd /opt/dmdbms/bin/libdodbc.so检查 libdodbc.so 依赖的文件是否有问题。- 依赖的 so 文件明明存在,但 ldd 仍提示找不到,一般是环境变量 LD_LIBRARY_PATH 设置问题。
解决方式:修改 /etc/profile.d 添加 LD_LIBRARY_PATH =$LD_LIBRARY_PATH: /opt/dmdbms/bin 设置,然后重新登录用户生效;或者 export 命令手动修改当前环境变量。
DmBulkCopy 提示[The faseloading dll not loading]
【问题描述】:
DmBulkCopy 提示[The faseloading dll not loading],然后在 readme.txt 里面得知要引用 dmfldr_dll.dll 但是找到这个 dll。
【解决方法】:
- Linux 中把 DM 数据库的路径加到环境变量里面去。
- Windows 的环境就把环境变量 path 加上 DM 数据库的路径。
linux 下 c++ 用 occi 访问
DM 数据库支持,头文件和库 DM 数据库都有,可以在安装目录下查询:
- /opt/dmdbms/include/occi.h。
- /opt/dmdbms/bin/libdmocci.so。




