执行 IDbConnection.Query 出现异常:转换 nvarchar 值 'Memory to data type int' 时转换失败

Executing IDbConnection.Query gives exception: Conversion failed when converting the nvarchar value 'Memory to data type int'

我最近在 Azure 上为我的网络应用程序创建了一个存储过程。我用ASP.net core 2.0来制作。在存储过程中,我想获取特定的 PC 组件类型,例如:"Motherboard"。之后,我想 return 将该类型添加到我的应用程序中。

这是我的存储过程

CREATE PROCEDURE GetCurrentType 
@BuildID INT = 1, 
@t NVARCHAR(128) OUTPUT,
@Index INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    SELECT @Index = COUNT(*) 
    FROM Partslist 
    WHERE buildId = @BuildID;

    SELECT @t = _Type 
    FROM ComponentTypes 
    WHERE PriorityID = @Index;

    RETURN @t
END

存储过程计算用户已选择的所有已选择部分。它使用该编号在 table ComponentTypes 中寻找下一个类型供用户选择。这种类型将被 returned。 BuildID暂时需要为1,但稍后我会将其更改为实际参数。

C#代码:

IEnumerable<string> test = db.Query<string>
(
      "GetCurrentType",
      new {BuildID = 1, t = "", Index = 0}, 
      commandType: CommandType.StoredProcedure
);

这应该获取类型并将其设置在测试 IEnumerable 中。但是当我 运行 它得到以下错误:

System.Data.SqlClient.SqlException: 'Conversion failed when converting the nvarchar value 'Memory' to data type int.'

我也尝试过使用 DynamicParameters,但这给了我同样的错误。真正奇怪的是我的数据库中没有内存 table 或列。

@t NVARCHAR(128) OUTPUT,

RETURN @t

RETURN 值始终为数字;来自 RETURN:

Syntax

RETURN [ integer_expression ]

Arguments

integer_expression

Is the integer value that is returned. Stored procedures can return an integer value to a calling procedure or an application.

Return Types

Optionally returns int.

基本上:不要 RETURN 这个。 SELECT 它,或使用 OUTPUT 参数。

我的建议是 SELECT