C# SQL存储过程从C代码返回-1,但直接执行时返回值

C# SQL存储过程从C代码返回-1,但直接执行时返回值,c#,sql,entity-framework,C#,Sql,Entity Framework,我有一个存储过程:- ALTER PROCEDURE [dbo].[Usp_GetFilterDM] -- Add the parameters for the stored procedure here @shortid nvarchar(10), @dmno nvarchar(10), @LOB int, @Status int AS BEGIN -- SET NOCOUNT ON added to prevent extra result s

我有一个存储过程:-

ALTER PROCEDURE [dbo].[Usp_GetFilterDM]
    -- Add the parameters for the stored procedure here
    @shortid nvarchar(10),
    @dmno nvarchar(10),
    @LOB int,
    @Status int
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
DECLARE @sqlCommand nvarchar(1000)

SET @sqlCommand ='SELECT *  FROM [ProjectTracker].[dbo].[View_GetALLDM] where (status <> 1 and status <> 2) '

IF @shortid <>'NO'
 SET @sqlCommand = @sqlCommand + 'and shortid  LIKE ''%'+ @shortid +'%'''

IF @dmno <>'NO'
 SET @sqlCommand = @sqlCommand + 'and DMNO LIKE ''%'+@dmno+'%'''

IF @LOB<> -1
 SET @sqlCommand = @sqlCommand + 'and LOB = @LOB '

 IF @Status <> -1
 SET @sqlCommand = @sqlCommand + 'and Status = @Status' 


EXEC sp_executesql @sqlCommand, N' @LOB INT,@Status int',  @LOB,@Status; 




END
在所有情况下,我的输出都是-1,我的所有查询都使用了存储过程,而且都能正常工作,但这是我第一次使用动态生成查询和sp_executeSQL。一般来说,我只编写一个select查询,它总是有效的

USP_GetFilterDM下的代码:-

 public virtual int Usp_GetFilterDM(string shortid, string dmno, Nullable<int> lOB, Nullable<int> status)
        {
            var shortidParameter = shortid != null ?
                new ObjectParameter("shortid", shortid) :
                new ObjectParameter("shortid", typeof(string));

            var dmnoParameter = dmno != null ?
                new ObjectParameter("dmno", dmno) :
                new ObjectParameter("dmno", typeof(string));

            var lOBParameter = lOB.HasValue ?
                new ObjectParameter("LOB", lOB) :
                new ObjectParameter("LOB", typeof(int));

            var statusParameter = status.HasValue ?
                new ObjectParameter("Status", status) :
                new ObjectParameter("Status", typeof(int));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("Usp_GetFilterDM", shortidParameter, dmnoParameter, lOBParameter, statusParameter);
        }

在C中显示Usp_GetFilterDM中的代码显示了如何映射存储过程的屏幕截图。您能为您的应用程序显示相同的命令吗?您知道正在使用哪个sql命令吗?该命令可以选择使用存储过程和字符串查询。有四个命令:Select、Insert、Update和Delete。我动态地构建了一个Select查询,它从视图中提取数据,然后为过滤器动态地构建sql查询
 public virtual int Usp_GetFilterDM(string shortid, string dmno, Nullable<int> lOB, Nullable<int> status)
        {
            var shortidParameter = shortid != null ?
                new ObjectParameter("shortid", shortid) :
                new ObjectParameter("shortid", typeof(string));

            var dmnoParameter = dmno != null ?
                new ObjectParameter("dmno", dmno) :
                new ObjectParameter("dmno", typeof(string));

            var lOBParameter = lOB.HasValue ?
                new ObjectParameter("LOB", lOB) :
                new ObjectParameter("LOB", typeof(int));

            var statusParameter = status.HasValue ?
                new ObjectParameter("Status", status) :
                new ObjectParameter("Status", typeof(int));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("Usp_GetFilterDM", shortidParameter, dmnoParameter, lOBParameter, statusParameter);
        }