Хранимая процедура SQL, возвращающая -1 из кода C #, но возвращающая значения при непосредственном выполнении - PullRequest
0 голосов
/ 29 августа 2018

У меня есть хранимая процедура: -

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

Когда я выполняю это непосредственно, я получаю значения, но когда я использую это в своем коде C #, используя ado .net модель и называю это так: -

var x = obj.Usp_GetFilterDM(shortid,dmno,LOB,status);
            var userDataString = JsonConvert.SerializeObject(x);
            return userDataString;

Я получаю вывод как -1 для всех случаев, я использовал хранимую процедуру для всех моих запросов, и все это работает, но это первый раз, когда я использовал динамический запрос на сборку и sp_executeSQL. Обычно я просто пишу запрос на выборку, и он всегда работает.

Код под 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);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...