在 Linux 上从 .NET Core 连接到 Informix
Posted
技术标签:
【中文标题】在 Linux 上从 .NET Core 连接到 Informix【英文标题】:Connecting from .NET Core to Informix on Linux 【发布时间】:2020-05-11 23:04:20 【问题描述】:我们正在尝试找出一个将.NET Core Microservice
连接到 Informix 数据库的好策略。 .NET Core Microservice
在 RHEL Linux 上运行。
我们当前的实现使用OdbcConnection
.NET Core 类来尝试其连接。无论我尝试了什么,我也得到了相同的结果。无法连接。
这是我们正在使用的示例连接字符串:
Dsn=;Driver=/opt/HCL/informix/4.10/lib/cli/iclis09b.so;Host=redactedip;Server=redactedserver;Protocol=olsoctcp;Database=redacted;LogonID=redacted;Uid=redacted;Pwd =redacted;Client_Locale=en_US.CP1252;Db_Locale=en_US.819;
我尝试了一个 odbc.ini
文件,其中包含一个 DSN。这适用于命令行中的 isql,但不适用于我们的 .NET Core 应用程序。 (我们也使用上述相同的设置在 odbc.ini 中设置 DSN)
我还尝试了许多不同方式的连接字符串。没有哪个有效。
您能否在没有 odbc.ini 的情况下连接到 Linux 上的 Informix? (只是使用连接字符串?)
是否还有其他适用于 .NET Core 的软件包/解决方案可能比原始 ODBC 连接更好、更健壮?我见过像IBM.Data.DB2.Core
这样的包,它应该能够访问Informix。有人用过成功吗?
即使是 .NET Core 应用程序的任何类型的工作 Linux 配置的源示例也会有所帮助...
有什么想法吗?
【问题讨论】:
在 Informix CSDK 的下一版本中将提供适用于 Windows 和 Linux 的 .NET Core 提供程序。与此同时,您应该能够使用 System.Data.Odbc 提供程序进行连接,只需确保您在 ODBC.INI 中设置了“UNICODE=UCS-2”。我在我的 Ubuntu 机器上进行了快速测试,它运行良好。最好使用最新的 4.50 CSDK。 @jsagrera - 所以你会推荐 odbc.ini 方法而不是连接字符串方法?您是否能够仅使用连接字符串成功连接?从 CI/CD 的角度来看,这对我们来说是最干净的方法。如果您能给我一个有效的连接字符串示例,那将非常有帮助。到目前为止,我已经看到了很多例子,但似乎没有。 下一个 CSDK (4.50.FC4) 将有一个名为 SQL_INFX_ATTR_CALL_FROM_DOTNET 的“新”SQLSetConnectAttr,它将自动设置 UCS-2。它还将设置在 Linux 上正确使用 .NET Core 所需的其他选项。只是一些建议,在连接字符串中启用'needOdbcTypesOnly'并切换到驱动程序'iclit09b.so'的线程版本,它会更好;) 【参考方案1】:好的,很高兴我找到了解决方案。正如 jsagrera 提到的 UNICODE=UCS-2 设置似乎非常重要。以下是一些配置错误的东西,一旦我修复了它们就真的很有帮助:
1) 权限 - 确保您对 informix 驱动程序目录具有适当的权限。
2) 权限 - 确保您对 odbcinst.ini 拥有适当的权限
3) 确保您在连接字符串或 odbc.ini 中引用的任何驱动程序在 odbcinst.ini 中作为匹配项存在
4) 您可以使用连接字符串,但仍必须为该 UNICODE 设置引用 odbc.ini 文件。我已经尝试了一些不同的方法来解决它,方法是将其作为 ENV 变量或连接字符串本身包含在内。它似乎不起作用。
5) 以下是我在连接字符串中使用的一些属性:Dsn=;Driver=Informix;Host=redactedIP;Server=redactedsqlhost;Protocol=olsoctcp;Database=redacted;Uid=redacted;Pwd=redacted;Client_Locale= en_US.CP1252;Db_Locale=en_US.819; 6) 我还必须为我的进程定义以下环境变量:INFORMIXDIR、INFORMIXSQLHOSTS、ODBCINI、LD_LIBRARY_PATH
祝你好运!我仍在研究 unicode 的解决方案,因此我不必在我的 odbc.ini 文件中包含该条目。
更新:在对 DB2 .NET Core Provider 进行了额外的实验之后,我也能够与之连接。 (在我为 informix 启用 DRDA 协议之后)。如果您正在寻找一种简单的方法来测试 .NET Core Provider,我建议您下载 Informix Docker Container。它已经启用了 DRDA,您可以通过 localhost 连接进行实验。
【讨论】:
以上是关于在 Linux 上从 .NET Core 连接到 Informix的主要内容,如果未能解决你的问题,请参考以下文章
在 Linux 上从 PHP 连接到 MS Access 数据库
无法从在 Docker (Linux) 中运行的 ASP.NET Core 连接到 SQL Server 命名实例
从 linux 的 dot net core 连接到远程 sql server 有时会失败,然后开始随机工作