![](/img/trans.png)
[英]JSON string output parameter from SQL Server stored procedure works in SSMS but produces empty value in C# client
[英]sending %val% as a parameter to stored procedure works in SSMS but not c#
我有一个存储过程,可以从 SSMS 中正常工作,但是当从 C# 代码中调用它时,以参数形式发送的 C# 方法它不起作用 C# 中的参数是否需要以某种特殊方式处理?
当我从 SSMS 调用 proc 时,如下所示,它工作正常。
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
但是当我使用如下参数从 C# 调用它时,我没有得到任何结果
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);
存储过程定义为
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
实际问题是@searchColumn=N'FistName', vs @SearchColumn = N'FirstName',
对于像我这样拼写有挑战的人 FistName vs FirstName
感谢 Rahul 对分析器的建议,这使我将两个查询都粘贴到 SSMS 中,并最终看到了丢失的 r
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.