尝试使用 .NET 5.0 Web 应用程序执行存储过程时出现转换错误

Posted

技术标签:

【中文标题】尝试使用 .NET 5.0 Web 应用程序执行存储过程时出现转换错误【英文标题】:Getting a conversion error when trying to execute a stored procedue with .NET 5.0 web app 【发布时间】:2021-07-05 17:11:11 【问题描述】:

我正在使用实体框架编写一个 .NET 5.0 Web 应用程序。我有一个 SQL Server 存储过程,我需要调用它来从一些复杂的计算中检索一些数据。我以前使用 Microsoft Access 从和 ODBC 连接运行存储过程。

我已经尝试使用 FromSqlRawFromSqlInterpolated 使用和不使用参数的网络应用程序调用。我终于决定看看我是否可以让它与硬编码值一起工作,然后担心以后包含参数。

我不断收到的错误是

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,2,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,2,3'").ToListAsync();

【问题讨论】:

向我们展示您的列类型定义和 TargetMetricMonitors 的对象映射 - 在某处,它有一个 short 或 int16 并且想要一个 int @Nikki9696 你说的完全正确。我必须深入研究该过程以找到正确的字段类型,但其中之一是smallint,因此我更改了该字段的模型并且它有效。感谢您的想法! 【参考方案1】:

这个问题是通过 cmets 中 Nikki9626 提供的想法解决的。我查看了所有临时表的字段类型的存储过程。我找到了一个smallint

我将模型从 public int TargetMetricStatus get; set; public Int16 TargetMetricStatus get; set; 页面正常工作。

【讨论】:

以上是关于尝试使用 .NET 5.0 Web 应用程序执行存储过程时出现转换错误的主要内容,如果未能解决你的问题,请参考以下文章

简单的 .Net 5.0 Web 应用程序获得 404(使用 mvc)

在 Xamarin 上的 Asp Net 5.0 中使用 AntiForgeryToken 访问 Web API

IIS 上的 .Net 5.0 Web API 部署问题

发布时服务器证书错误,.Net core 5.0,IIS 服务器

.NET 5.0:在多项目解决方案中构建项目

.NET 5.0 中的 Windows 媒体播放器