У меня есть хранимая процедура: -
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);
}