c# - 进度 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();
}
解决方案
根据进度知识库,您收到错误编号(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