如何解决尝试使用 .NET 5.0 Web 应用程序执行存储过程时出现转换错误
我正在使用实体框架编写 .NET 5.0 Web 应用程序。我有一个 sql Server 存储过程,我需要调用它来从一些复杂的计算中检索一些数据。我以前使用过 Microsoft Access 来运行来自 ODBC 连接的存储过程。
我已经尝试过使用 FromsqlRaw
和 FromsqlInterpolated
进行网络应用调用,有无参数。我最终决定看看我是否可以使其与硬编码值一起工作,然后再考虑稍后包含参数。
我不断收到的错误是
InvalidCastException: 无法将“system.int16”类型的对象转换为“system.int32”类型
我不确定这是否是使其无法工作的错误,但这是我尝试过的不同配置中的共同点。我最初的想法是 ShiftID
参数有问题,但我尝试过的任何方法都没有奏效。
我不确定需要显示什么来尝试解决此问题,因此以下是我主要处理的内容。
这是我从 sql Server Management Studio 运行时调用的存储过程
USE [DATABASE]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[bds_TargetMetrics_Results_Get_S]
@p_ShiftDate = NULL,@p_ShiftID = NULL,@p_MachineIDs = N'29',@p_TargetMetricIDs = N'9',@p_TargetMetricGroupIDs = N'1,2,3'
SELECT 'Return Value' = @return_value
这是我可以用来返回相同结果的 Access Passthrough 查询。
EXECUTE dbo.bds_TargetMetrics_Results_Get_S
@p_ShiftDate = '',@p_ShiftID = '',@p_MachineIDs = '29',@p_TargetMetricIDs = '9',@p_TargetMetricGroupIDs = '1,3'
这是我尝试在网络应用程序中使用的代码。我创建了一个 TargetMetricMonitors
类,其中包含存储过程的返回字段,我试图用过程结果填充该字段。
TargetMetricMonitors = await _context.TargetMetricMonitors.FromsqlRaw(
"EXECUTE dbo.bds_TargetMetrics_Results_Get_S "
+ "@p_ShiftDate = '',"
+ "@p_ShiftID = '',"
+ "@p_MachineIDs = '29',"
+ "@p_TargetMetricIDs = '9',"
+ "@p_TargetMetricGroupIDs = '1,3'").ToListAsync();
解决方法
这是通过 Nikki9626 在评论中提供的想法解决的。我通过存储过程查看所有临时表的字段类型。我发现了一个 smallint
我改变了我的模型
public int TargetMetricStatus { get; set; }
到
public Int16 TargetMetricStatus { get; set; }
并且页面正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。