繁体   English   中英

将 %val% 作为参数发送到存储过程在 SSMS 中有效,但在 c# 中无效

[英]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.

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