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.