SQL0332N 不支持从源代码页“”到目标代码页“”的字符转换
SQL0332N Character conversion from the source code page "" to the target code page "" is not supported
我正在尝试从 .NET 5 控制台应用程序连接到 IBM DB2 数据库。这在本地 Docker 实例中对 DB2 LUW 工作正常,但在连接到 z/OS 大型机实例时失败。
服务器:
- IBM DB2 v11.5
- z/OS
客户:
- .NET 5 控制台应用程序
- IBM.Data.DB2.Core (v3.1.0.400)
- IBM 数据服务器驱动程序 (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);
}
我正在测试的数据库用户已被另一个 .NET 程序用来连接到此数据库,尽管该应用程序较旧 (.NET Framework 3.5)。
我试过的:
- 同时使用
DB2CODEPAGE
环境变量和连接字符串 CodePage
参数将代码页设置为 1200、1208 或 1252;错误消息没有任何改变
- 已验证所有软件(DB2、DB2 DSDRIVER、.NET 提供程序)都是 v11.5
- 已验证我可以使用
db2cli.exe
进行连接和 运行 查询
现在怎么办?
我 can/should 是否在某处设置 DB2 服务器类型?例如,z/OS 与 LUW?请注意,我没有使用 EntityFramework,只是直接在该 Connection 对象上执行命令(尽管错误在此之前出现)。
我们已经解决了这个问题。需要进行两项更改,这肯定会使事情变得复杂。
- 我们确实需要将
DB2CODEPAGE
环境变量设置为 1208
- 我们使用
CurrentSchema
连接字符串参数为我们的 SQL 查询设置前缀,但前缀不是实际的架构,即使正确的代码页是,它也会断开连接设置,客户端上没有有用的错误消息。我们删除了该参数并在 SQL 查询中手动设置了 table 前缀。
进行这两项更改使应用程序正常运行。
连接到本地 Docker 实例成功了,因为我已经为该前缀设置了一个实际架构,但没有意识到 prod 实例的配置不同。
我正在尝试从 .NET 5 控制台应用程序连接到 IBM DB2 数据库。这在本地 Docker 实例中对 DB2 LUW 工作正常,但在连接到 z/OS 大型机实例时失败。
服务器:
- IBM DB2 v11.5
- z/OS
客户:
- .NET 5 控制台应用程序
- IBM.Data.DB2.Core (v3.1.0.400)
- IBM 数据服务器驱动程序 (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);
}
我正在测试的数据库用户已被另一个 .NET 程序用来连接到此数据库,尽管该应用程序较旧 (.NET Framework 3.5)。
我试过的:
- 同时使用
DB2CODEPAGE
环境变量和连接字符串CodePage
参数将代码页设置为 1200、1208 或 1252;错误消息没有任何改变 - 已验证所有软件(DB2、DB2 DSDRIVER、.NET 提供程序)都是 v11.5
- 已验证我可以使用
db2cli.exe
进行连接和 运行 查询
现在怎么办? 我 can/should 是否在某处设置 DB2 服务器类型?例如,z/OS 与 LUW?请注意,我没有使用 EntityFramework,只是直接在该 Connection 对象上执行命令(尽管错误在此之前出现)。
我们已经解决了这个问题。需要进行两项更改,这肯定会使事情变得复杂。
- 我们确实需要将
DB2CODEPAGE
环境变量设置为1208
- 我们使用
CurrentSchema
连接字符串参数为我们的 SQL 查询设置前缀,但前缀不是实际的架构,即使正确的代码页是,它也会断开连接设置,客户端上没有有用的错误消息。我们删除了该参数并在 SQL 查询中手动设置了 table 前缀。
进行这两项更改使应用程序正常运行。
连接到本地 Docker 实例成功了,因为我已经为该前缀设置了一个实际架构,但没有意识到 prod 实例的配置不同。