例外:指定的转换不是 valid.v
Exception: Specified cast is not valid.v
at IBM.Data.DB2.Core.TypeMap.FromValue(Object oValue, Int32& iByteLength, DB2Connection connection, Int32 iArrayLength, String parameterName, Boolean bMultiRowCmd)
at IBM.Data.DB2.Core.DB2Parameter.GetParamInfo(Int32 paramPos, DB2ParamInfo& paramInfo, Boolean chainBegin)
at IBM.Data.DB2.Core.DB2ParameterCollection.GetParamInfoList(Boolean chainBegin)
at IBM.Data.DB2.Core.DB2Command.ExecuteReaderObject(CommandBehavior behavior, String method, DB2CursorType reqCursorType, Boolean abortOnOptValueChg, Boolean skipDeleted, Boolean isResultSet, Int32 maxRows, Boolean skipInitialValidation)
at IBM.Data.DB2.Core.DB2Command.ExecuteReaderObject(CommandBehavior behavior, String method)
at IBM.Data.DB2.Core.DB2Command.ExecuteReader(CommandBehavior behavior)
at IBM.Data.DB2.Core.DB2Command.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
在以下代码行的位置抛出了异常。
var dr = await cmd.ExecuteReaderAsync()
我们对 dotnet core 2.1 没有任何问题,但是当我们更新到 dotnet core 3.1 时,我们 运行 遇到了这个问题。
更新
使用的 dotnetcore 2.1 项目 ibm.data.db2.core 1.3
使用 ibm.data.db2.core 3.1(单元测试通过)
的 dotnetcore 3.1 项目
我现在开始工作了。
在 dotnet core 2.1 中,对象值正确反序列化。在我的例子中,它是字符串,在 dotnet core 3.1 中它被反序列化为导致问题的 JsonElement,而 db2 没有将 jsonelement 识别为任何类型。
我通过添加将我的服务切换为使用 Newtonsoftjson
services.AddControllers().AddNewtonsoftJson();
现在它正在对它进行适当的脱盐处理。
bool 有一个未解决的问题 here,这与我的情况几乎相同,但我的对象是字符串类型。他们还建议在那里为 Object.
编写自定义转换器
at IBM.Data.DB2.Core.TypeMap.FromValue(Object oValue, Int32& iByteLength, DB2Connection connection, Int32 iArrayLength, String parameterName, Boolean bMultiRowCmd)
at IBM.Data.DB2.Core.DB2Parameter.GetParamInfo(Int32 paramPos, DB2ParamInfo& paramInfo, Boolean chainBegin)
at IBM.Data.DB2.Core.DB2ParameterCollection.GetParamInfoList(Boolean chainBegin)
at IBM.Data.DB2.Core.DB2Command.ExecuteReaderObject(CommandBehavior behavior, String method, DB2CursorType reqCursorType, Boolean abortOnOptValueChg, Boolean skipDeleted, Boolean isResultSet, Int32 maxRows, Boolean skipInitialValidation)
at IBM.Data.DB2.Core.DB2Command.ExecuteReaderObject(CommandBehavior behavior, String method)
at IBM.Data.DB2.Core.DB2Command.ExecuteReader(CommandBehavior behavior)
at IBM.Data.DB2.Core.DB2Command.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
在以下代码行的位置抛出了异常。 var dr = await cmd.ExecuteReaderAsync()
我们对 dotnet core 2.1 没有任何问题,但是当我们更新到 dotnet core 3.1 时,我们 运行 遇到了这个问题。
更新 使用的 dotnetcore 2.1 项目 ibm.data.db2.core 1.3 使用 ibm.data.db2.core 3.1(单元测试通过)
的 dotnetcore 3.1 项目我现在开始工作了。 在 dotnet core 2.1 中,对象值正确反序列化。在我的例子中,它是字符串,在 dotnet core 3.1 中它被反序列化为导致问题的 JsonElement,而 db2 没有将 jsonelement 识别为任何类型。
我通过添加将我的服务切换为使用 Newtonsoftjson
services.AddControllers().AddNewtonsoftJson();
现在它正在对它进行适当的脱盐处理。
bool 有一个未解决的问题 here,这与我的情况几乎相同,但我的对象是字符串类型。他们还建议在那里为 Object.
编写自定义转换器