首页 > 解决方案 > 进度 OpenEdge 错误 [60] [DataDirect][ODBC 20101 驱动程序]6013

问题描述

尝试使用 odbc 连接到进度 opensge 数据库时遇到问题。客户端代码在 c# 中并在 docker 中运行。这是我的代码:

using (OdbcConnection cn = new OdbcConnection("DSN=PROGRESS;UID=username;PWD=pass;"))
{
    cn.Open();
}

问题是程序崩溃并cn.Open()出现以下错误:ERROR [60] [DataDirect][ODBC 20101 driver]6013。

我可以使用成功连接isql -v PROGRESS username pass并且可以查询表。

Environnement :它是 Docker 环境中的 .NET Core 应用程序。这是我的 odbc.ini 文件:

[PROGRESS]
Driver=/usr/lib/x86_64-linux-gnu/pgoe27.so
HostName=192.168.2.11
DatabaseName=dbname
LogonID=username
Password=pass
PortNumber=20000

[ODBC]
Trace=0
TraceFile=odbctrace.out
TraceDll=/usr/lib/openedge/lib/pgtrc27.so
InstallDir=/usr/lib/openedge

我不明白为什么我可以使用 isql 进行连接,但不能使用 c# OdbcConnection ...在此先感谢

已编辑

这是我的 odbc 文件夹权限:

# ls -l lib
total 27124
-rwxr-xr-x 1 root root  1782648 Aug  2 13:09 libodbc.so
-rwxr-xr-x 1 root root  1280424 Aug  2 13:09 libodbcinst.so
-rwxr-xr-x 1 root root 14682952 Aug  2 13:09 libpgicu27.so
-rwxr-xr-x 1 root root  1468736 Aug  2 13:09 libpgmback.so
-rwxr-xr-x 1 root root  2351288 Aug  2 13:09 libpgssl27.so
-rwxr-xr-x 1 root root  1586488 Aug  2 13:09 odbccurs.so
-rwxr-xr-x 1 root root  2871272 Aug  2 13:09 pgoe27.so
-rwxr-xr-x 1 root root  1667632 Aug  2 13:09 pgtrc27.so
-rwxr-xr-x 1 root root    63800 Aug  2 13:09 vscnctdlg.so

# ls -lR locale
locale:
total 8
drwxrwxrwx 1 root root 4096 Aug  2 13:09 en_US

locale/en_US:
total 4
drwxrwxrwx 1 root root 4096 Aug  2 13:09 LC_MESSAGES

locale/en_US/LC_MESSAGES:
total 208
-rw-rw-r-- 1 root root 36241 Aug  2 13:09 odbc.m
-rw-rw-r-- 1 root root 19099 Aug  2 13:09 odbc.po
-rw-rw-r-- 1 root root 19096 Aug  2 13:09 pgmback.mo
-rw-rw-r-- 1 root root 11581 Aug  2 13:09 pgmback.po
-rw-rw-r-- 1 root root 72722 Aug  2 13:09 pgoe27.mo
-rw-rw-r-- 1 root root 47627 Aug  2 13:09 pgoe27.po

我已经在我的 .net 程序中管理连接指定连接,但我仍然无法使用 DSN + odbc.ini :

OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder
{
    Driver = "/usr/lib/openedge/lib/pgoe27.so",
};
builder.Add("HostName", "192.168.2.11");
builder.Add("DatabaseName", "PROGRESS");
builder.Add("LogonID", "username");
builder.Add("Password", "password");
builder.Add("PortNumber", "20000");


using (OdbcConnection cnGlims = new OdbcConnection(builder.ConnectionString))
{
    cnGlims.Open();
}

标签: c#dockerodbcopenedgeunixodbc

解决方案


根据进度知识库,您收到错误编号(60、6013)而不是错误消息的事实表明配置问题阻止了消息描述文件的加载。

https://knowledgebase.progress.com/articles/Knowledge/3556说:

原因:ODBC 驱动程序管理器和/或 ODBC 驱动程序库无法加载其消息文件。

odbc.ini 文件的 [ODBC] 部分中的 InstallDir 设置不正确,或者缺少 locale/en_US/LC_MESSAGES 中的消息文件。

确保正确设置以下内容:

将环境变量 LANG 设置为 en_US :

  export LANG=en_US (ksh shell)
  setenv LANG en_US (csh shell)

确保环境变量 ODBCINI(或 ODBC_INI)指向正确的 odbc.ini 文件

确保在 odbc.ini 文件的 [ODBC] 部分中为 InstallDir 指定了正确的 ODBC 驱动程序安装路径,例如 InstallDir=/opt/odbc

确保 .mo / .po 消息文件存在 (odbcinstaldir/locale/en_US/LC_MESSAGES) 并且可以由您的应用程序加载

如果您的 installDir 是 /usr/lib/openedge 那么您应该测试这些文件的存在(和权限),如下所示:

$ cd /usr/lib/openedge

$ ls -l ./odbc/lib
total 29832
-rwxrwxr-x. 1 root root  1676480 Jan 21  2020 libodbcinst.so
-rwxrwxr-x. 1 root root  2182544 Jan 21  2020 libodbc.so
-rwxrwxr-x. 1 root root 14682952 Jan 21  2020 libpgicu27.so
-rwxrwxr-x. 1 root root  1977640 Jan 21  2020 libpgmback.so
-rwxrwxr-x. 1 root root  2359016 Jan 21  2020 libpgssl27.so
-rwxrwxr-x. 1 root root  2065616 Jan 21  2020 odbccurs.so
-rwxrwxr-x. 1 root root  3383128 Jan 21  2020 pgoe27.so
-rwxrwxr-x. 1 root root  2142864 Jan 21  2020 pgtrc27.so
-rwxrwxr-x. 1 root root    63800 Jan 21  2020 vscnctdlg.so

$ ls -lR ./odbc/locale
./odbc/locale:
total 0
drwxrwxrwx. 3 root root 25 Apr 10  2020 en_US

./odbc/locale/en_US:
total 0
drwxrwxrwx. 2 root root 105 Apr 10  2020 LC_MESSAGES

./odbc/locale/en_US/LC_MESSAGES:
total 212
-rw-rw-r--. 1 root root 36241 Jan 21  2020 odbc.m
-rw-rw-r--. 1 root root 19099 Jul 29  2011 odbc.po
-rw-rw-r--. 1 root root 19096 Jan 21  2020 pgmback.mo
-rw-rw-r--. 1 root root 11581 Jul 29  2011 pgmback.po
-rw-rw-r--. 1 root root 74007 Jan 21  2020 pgoe27.mo
-rw-rw-r--. 1 root root 49045 Jan 21  2020 pgoe27.po

推荐阅读