C# 执行IDbConnection.Query时出现异常:转换nvarchar值时转换失败';内存到数据类型int';

C# 执行IDbConnection.Query时出现异常:转换nvarchar值时转换失败';内存到数据类型int';,c#,sql,tsql,asp.net-core-2.0,dapper,C#,Sql,Tsql,Asp.net Core 2.0,Dapper,我最近在Azure上为我的Web应用程序创建了一个存储过程。我使用ASP.NETCore2.0来制作它。在存储过程中,我想得到一个特定的PC组件类型,例如:“主板”。之后,我想将该类型返回到我的应用程序中 这是我的存储过程 CREATE PROCEDURE GetCurrentType @BuildID INT = 1, @t NVARCHAR(128) OUTPUT, @Index INT OUTPUT AS BEGIN SET NOCOUNT ON; SELECT @I

我最近在Azure上为我的Web应用程序创建了一个存储过程。我使用ASP.NETCore2.0来制作它。在存储过程中,我想得到一个特定的PC组件类型,例如:“主板”。之后,我想将该类型返回到我的应用程序中

这是我的存储过程

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
存储过程统计用户拾取的所有已选定零件。根据该数字,它将在ComponentTypes表中查找下一个类型,供用户选择。将返回此类型。BuildID现在需要为1,但稍后我会将其更改为实际参数

C#代码:

IEnumerable<string> test = db.Query<string>
(
      "GetCurrentType",
      new {BuildID = 1, t = "", Index = 0}, 
      commandType: CommandType.StoredProcedure
);
IEnumerable test=db.Query
(
“GetCurrentType”,
新的{BuildID=1,t=”“,Index=0},
commandType:commandType.StoredProcess
);
这应该获取类型并在测试IEnumerable中设置它。但当我运行它时,它会出现以下错误:

System.Data.SqlClient.SqlException:“将nvarchar值“Memory”转换为数据类型int时,转换失败。”

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

@t NVARCHAR(128) OUTPUT,

返回值始终是数字;发件人:

语法
返回[整数表达式]

论据 整数表达式

是返回的整数值。存储过程可以向调用过程或应用程序返回整数值

返回类型 可选返回int

基本上:不要
返回这个。
选择它,或使用
输出
参数


我的建议是
SELECT

你能举个例子说明我应该如何使用输出参数吗?@sporterddo使用
SELECT@t
会容易得多,这是唯一匹配
Query
Query
始终映射到
SELECT
RETURN @t