SQL0332N 不支持从源代码页" "到目标代码页" "的字符转换



我正试图从.NET5控制台应用程序连接到IBMDB2数据库。这在本地Docker实例中对DB2LUW很有效,但在连接到z/OS大型机实例时失败。

服务器:

  • IBM DB2 v11.5
  • z/OS

客户端:

  • .NET 5控制台应用程序
  • IBM.Data.DB2.Core(v3.1.0.400(
  • IBM Data Server驱动程序(v11.5(

错误:

IBM.Data.DB2.Core.DB2Exception (0x80004005): ERROR [57017] [IBM] SQL0332N  Character conversion from the source code page "" to the target code page "" is not supported.  SQLSTATE=57017
at IBM.Data.DB2.Core.DB2ConnPool.Open(DB2Connection connection, String& szConnectionString, DB2ConnSettings& ppSettings, Object& ppConn)
at IBM.Data.DB2.Core.DB2Connection.Open()
at <my code>

连接字符串:

Database=<redacted>;User ID=<redacted>;Password=<redacted>;Server=<redacted>:448;Persist Security Info=True;CurrentSchema=<redacted>;Connect Timeout=30

打开连接:

var connection = new DB2Connection(connectionString);
try
{
connection.Open();
}
catch (DB2Exception e)
{
logger.LogError("Unable to access DB2 instance");
logger.LogError(e.ToString());
throw new DbAccessAcception(e);
}

与我一起测试的DB用户已经被另一个.NET程序用于连接到此数据库,尽管该应用程序较旧(.NET Framework 3.5(。

我尝试过的:

  • 使用DB2CODEPAGE环境变量和连接字符串CodePage参数,将代码页设置为1200、1208或1252;没有任何更改错误消息
  • 已验证所有软件(DB2、DB2 DSDRIVER、.NET提供程序(都是v11.5版本
  • 已验证我可以使用db2cli.exe连接并运行查询

现在怎么办是否有可以/应该设置DB2服务器类型的地方?例如,z/OS与LUW?请注意,我没有使用EntityFramework,只是直接在Connection对象上执行命令(尽管在此之前会出现错误(。

我们已经解决了这个问题。有两个变化要做,这无疑使事情变得复杂。

  1. 我们确实需要将DB2CODEPAGE环境变量设置为1208
  2. 我们使用CurrentSchema连接字符串参数来设置SQL查询的前缀,但前缀不是实际的模式,即使设置了正确的代码页,也会中断连接,而客户端上没有有用的错误消息。我们删除了该参数,并在SQL查询中手动设置了表前缀

同时进行这两项更改可以使应用程序正常工作。

连接到本地Docker实例是有效的,因为我为该前缀设置了一个实际的模式,但没有意识到prod实例的配置不同。

最新更新