.net core iSeries与IBM DB2连接器核心的连接错误

.net core iSeries与IBM DB2连接器核心的连接错误,.net-core,ibm-midrange,db2-400,.net Core,Ibm Midrange,Db2 400,当我们从.NET framework迁移到.NET core时,我们必须将iSeries连接字符串的格式从使用服务器=更改为使用数据源=并包括端口#,但我们还必须包括数据库=,因为如果没有它,连接字符串将无法分配给连接“无效参数”异常。对于数据库,我们始终会收到一条统一的错误消息: ERROR [08004] [IBM] SQL30061N The database alias or database name \"QSYS \" was not

当我们从.NET framework迁移到.NET core时,我们必须将iSeries连接字符串的格式从使用
服务器=
更改为使用
数据源=
并包括端口#,但我们还必须包括
数据库=
,因为如果没有它,连接字符串将无法分配给连接“无效参数”异常。对于数据库,我们始终会收到一条统一的错误消息:

ERROR [08004] [IBM] SQL30061N  The database alias or database name \"QSYS              \" was not found at the remote node.
(注意DB名称中的额外空格)

无论我们为数据库提供什么,错误总是一样的。我们尝试了与
DSPLIB
QSYS
等报告的
app0123
类似的实际库名

我们还尝试了
DSPRDBDIRE
报告的数据库,其名称类似于
IHST0123
,但在这种情况下,错误不同:

错误[42968][IBM]SQL1598N由于许可问题,尝试连接到数据库服务器失败

我们知道服务器没有许可问题,因为许多Java和C#应用程序都连接到我们的生产环境

我们通常的做法是,如果应用程序
App1
连接,它将使用
App1
用户名和
app01
app02
等模式,
app01
作为默认模式。因此,我们在连接字符串中只使用了iSeries主机名,如
IHST01
等,并添加了用户ID和密码通过连接字符串生成器

通过.NET core connector连接到DB2 LUW没有问题,因为其上的数据库非常明显且明确。因为我们从未在.NET framework下指定过iSeries数据库,所以不清楚它必须是什么。有人知道吗?

库(又称架构)名称不是数据库名称

DSPRDBDIRE
中的*本地条目应该是您的数据库名称

更好的工具是IBM Access客户端解决方案(ACS)“数据库-->架构”工具,它的UI如下:

在连接的服务器(ut29p63.rch.stglabs.ibm.com)上,有(至少)两个数据库:

  • ut29p63
  • 数据库测试
我很惊讶您不认为.NET Framework或Java需要DB名称,因为我一直都需要它们。如果您的IBM I上只有一个数据库,这在较小的框中很常见,那么DB名称可能与系统名称匹配

从许可证错误消息判断,您正在连接

但是,.NET核心nuget包使用IBM Db2 Connect驱动程序。此驱动程序包含在Db2 for LUW中,并且具有适当的可选许可证,允许连接到IBM Db2 for i或IBM Db2 for z/OS

换句话说,Db2 Connect驱动程序始终可以连接到Db2 LUW,但您必须支付增强许可证的费用才能连接到IBM i或IBM z/OS

如果在.NET Framework中使用Db2 Connect驱动程序,那么相同的许可证将适用于.NET核心(假设Db2 Connect版本匹配)


但是,如果您使用的是用于.NET Framework的免费ODBC/OLEDB/ADO驱动程序,那么您将需要用于.NET Core的Db2 Connect许可证。

完整框架连接中iSeries的许可证在哪里?如果在那里,为什么不包括在Core中?我不相信我说过任何其他技术。我们使用了对客户端的引用在framework下访问DLL。我在那里没有看到许可证文件。现在我明白了。IBM在我们可能迁移到Core的时候劫持了所有运行iSeries的人。谢谢,但不谢谢。我们不会与恐怖分子谈判。@RixaCivad-如果您使用的是Db2 Connect with.NET framework,您应该也可以将其用于Core。您可以ays使用ODBC(这是免费的)。我不知道如何从核心应用程序使用完整的框架程序集。我们已经迁移到ODBC了。