简体   繁体   中英

sending %val% as a parameter to stored procedure works in SSMS but not c#

I have a stored procedure the works fine from SSMS but when call it from C# code sending in the params form a C# method it does not work Does the parameter in C# need to be treated in some special way?

when I call the proc from SSMS as shown below it works fine.

DECLARE @RC int
DECLARE @pageNum int = 1
DECLARE @pageSize int = 10
DECLARE @sortColumnName varchar(50) = N'UserName'
DECLARE @SearchColumn varchar(50) =  N'FirstName'
DECLARE @SearchValue varchar(50) = N'%john%'


EXECUTE @RC = [dbo].[GetMemberList] 
   @pageNum
  ,@pageSize
  ,@sortColumnName
  ,@SearchColumn
  ,@SearchValue
GO

but when I call it from C# with parameters as follows I get no results

SqlCommand cmd = new SqlCommand("GetMemberList", con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@pageNum", pageIndex);
cmd.Parameters.AddWithValue("@pageSize", mmembersPerPage);
cmd.Parameters.AddWithValue("@sortColumnName", sortColumn);
cmd.Parameters.AddWithValue("@searchColumn", searchColumn);
string val = string.Format("%{0}%", searchValue);
cmd.Parameters.AddWithValue("@searchValue", val);

SqlDataAdapter sd = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();

sd.Fill(dt);

The stored procedure is defined as

ALTER PROCEDURE [dbo].[GetMemberList]
(
    @pageNum INT,
    @pageSize INT,
    @sortColumnName VARCHAR(50),
    @SearchColumn VARCHAR(50) = null,
    @SearchValue VARCHAR(50) = null
)
AS
BEGIN

  WITH PagingCTE AS
  (
    SELECT *, ROW_NUMBER() OVER 
     (ORDER BY CASE
       WHEN @sortColumnName = 'UserName' THEN  UserName 
       WHEN @sortColumnName = 'FirstName' THEN  FirstName 
       WHEN @sortColumnName = 'LastName' THEN  LastName 
       WHEN @sortColumnName = 'Email' THEN  Email 
       WHEN @sortColumnName = 'Phone' THEN  Phone 
       ELSE UserName
                         END) AS RowNumber
    FROM dbo.Member WITH(NOLOCK)
    where Active = 1 and
     CASE 
            WHEN (@SearchColumn is not null and @SearchColumn = 'UserName') THEN  UserName
            WHEN (@SearchColumn is not null and @SearchColumn = 'FirstName') THEN  FirstName
            WHEN (@SearchColumn is not null and @SearchColumn = 'LastName') THEN  LastName
            WHEN (@SearchColumn is not null and @SearchColumn = 'Email') THEN  Email
        END
         like @SearchValue
  )

  SELECT *
  FROM PagingCTE
  WHERE RowNumber BETWEEN (@pageNum - 1) * @pageSize + 1 
   AND @pageNum * @pageSize
END
RETURN 0
GO

The actual problem was @searchColumn=N'FistName', vs @SearchColumn = N'FirstName',

for those spelling challenged like myself FistName vs FirstName

Thank you Rahul for your suggestion on profiler that lead me to paste both queries into SSMS and finally saw the missing r

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM