C# ASP.NET MVC-使用分页与Oracle和Dapper协作
我不得不将sql server更改为oracle 所以我重拨了查询 我使用dapper在sql server上的查询/方法是这样的,并且工作得非常完美:C# ASP.NET MVC-使用分页与Oracle和Dapper协作,c#,asp.net-mvc,oracle,dapper,C#,Asp.net Mvc,Oracle,Dapper,我不得不将sql server更改为oracle 所以我重拨了查询 我使用dapper在sql server上的查询/方法是这样的,并且工作得非常完美: public Pagination<User> ShowAllUsers(string name, int pageSize, int pageNumber) { var cn = DbContext.Database.Connection; var sql =
public Pagination<User> ShowAllUsers(string name, int pageSize, int pageNumber)
{
var cn = DbContext.Database.Connection;
var sql = @"SELECT * FROM USERS" +
"WHERE (@Name IS NULL OR Nome LIKE @Name+ '%') " +
"ORDER BY [Nome] " +
"OFFSET " + pageSize * (pageNumber - 1) + " ROWS " +
"FETCH NEXT " + pageSize + " ROWS ONLY " +
" " +
"SELECT COUNT(Id) FROM USERS" +
"WHERE (@Nome IS NULL OR Name LIKE @Name + '%') ";
var multi = cn.QueryMultiple(sql, new { Name = name});
var users= multi.Read<User>();
var total = multi.Read<int>().FirstOrDefault();
}
如何调整此查询以使用dapper?可能是因为您没有将pageSize作为参数传递
var multi = cn.QueryMultiple(sql, new { Name = name, PageSize = pageSize});
您在哪里将
pageSize
(和pageNumber
)传递到查询new{Name=Name}
=>new{Name=Name,pageSize,pageNumber}
@Selvin您的观察很重要,我忘了观察参数的经过。修改时,我从Dapper Reader处理的异常中得到错误<代码>“读取器已被释放;这可能发生在所有数据都已被使用对象名称:'Dapper.SqlMapper+GridReader''之后。”因此我将变量“multi”更改为cn.Query,但现在在用户和总变量中出现错误。有什么想法吗?pageNumber
参数缺少,如下所示well@PiotrŁazarczyk是个好地方。他的sql server原始代码也缺少这些参数。他的sql server原始代码也缺少这些参数。不,不是-因为他没有使用这些变量作为参数,而是直接将其添加到sql中code@Selvin你说得对,他正在使用连接来构建他的查询。这有点离题,但将所有这些变量作为参数使用会改进他的查询,就像他在name中使用的那样。不确定是否可以使用MSSQL中的OFFSET
和FETCH NEXT
Invalid parameter binding Parameter Name: pageSize
var multi = cn.QueryMultiple(sql, new { Name = name, PageSize = pageSize});