我用 Dapper 调用存储过程
存储过程返回一个可分页列表
我的数据库中有30条记录
但每一系列的重复值都会被返回
IEnumerable<TEntity> entities;
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@page", page, DbType.Int32, ParameterDirection.Input);
parameters.Add("@pageSize", pageSize, DbType.Int32, ParameterDirection.Input);
parameters.Add("@search", search, DbType.String, ParameterDirection.Input);
try
{
_connection.Open();
entities = await _connection.QueryAsync<TEntity>($"{storedProcedure}", parameters);
}
catch (Exception)
{
return null;
}
finally
{
_connection.Dispose();
_connection.Close();
}
return entities.ToList();
及储存程序:
ALTER PROCEDURE [dbo].[SP_GetCategories]
@search nvarchar(300)='',
@page int=1,
@pageSize int=10
AS
BEGIN
set @page = (@page - 1) * @pageSize;
Declare @Sql Nvarchar(800)
Set @Sql=' select * from Dy.Category As C With(Nolock) where IsDeleted=0 ';
IF @search Is Not Null And @search <> ''
BEGIN
Set @Sql=@Sql+' AND C.Title like N''%''' +@search +'''%'' ' ;
END
Set @Sql=@Sql +' Order By CreateTime Desc OFFSET '+CAST(@page AS NVARCHAR(100))+
' ROWS FETCH NEXT ' +CAST(@pageSize AS NVARCHAR(100))+' ROWS ONLY';
EXEC sp_executesql @Sql
END
我找到了问题的答案 它也可能对你有帮助 我定义了命令类型: CommandType.StoredProcedure
entities = await _connection.QueryAsync<TEntity>($"{storedProcedure}", parameters,commandType:CommandType.StoredProcedure);