1

我有一个带有输出参数的以下存储过程。

ALTER proc [dbo].[CRS_GetNewMessageCount]
@CaseId int,
@Type varchar(50),
@Location varchar(50),
@Count int out
as

begin
if @location='admin'
    begin
    if @type='consumer'
    select @Count=(Select count(fdId) from tb_CRS_Messages where fdCaseId=@CaseId and fdIsConsumerType=1 and fdIsReadatAdmin=0)
    else
    select @Count=(Select count(fdId) from tb_CRS_Messages where fdCaseId=@CaseId and fdIsMemberType=1 and fdIsReadatAdmin=0)
    end
else
begin
    if @type='consumer'
    select @Count=(Select count(fdId) from tb_CRS_Messages where fdCaseId=@CaseId and fdIsConsumerType=1 and fdIsReadatFront=0)
else
select @Count=(Select count(fdId) from tb_CRS_Messages where fdCaseId=@CaseId and fdIsMemberType=1 and fdIsReadatFront=0)
END
SELECT @Count
END

在 SQL Server 上工作非常完美,请参见下面的输出:

stored procedure通过以下方式调用Entity Framework

using (DbContext db = new DbContext())
            {
                try
                {
                    var NewMessage = new ObjectParameter("Count", typeof(int));
                    int returnValue = 0;
                    db.CRS_GetNewMessageCount(CaseId, type, location, NewMessage);
                    int.TryParse(NewMessage.Value.ToString(), out returnValue);
                    return returnValue;
                }
                catch { return 0; }
            }

它在输出参数中给出null值。

请帮忙。

4

2 回答 2

1

不确定它是否有所作为,但您是否尝试使用“typeof(Int32)”而不是“typeof(int)”?也尝试将 NewMessage 作为 ObjectParameter 而不是作为 var,也许它会有所作为。

ObjectParameter NewMessage = new ObjectParameter("NewMessage ", typeof(Int32));

您是否尝试在没有参数的情况下运行存储过程,意味着无论您输入什么参数都返回带有值的@Count-variable?像这样,您可以确定您的输入参数是否错误(由 C# 传递)。

于 2016-04-27T11:59:37.817 回答