问题描述
我正在使用实体框架编写 .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();