繁体   English   中英

Asp.net 核心分页不适用于数据表存储过程

Asp.net core pagination not working on datatable stored procedure

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我收到此错误:

处理请求时发生未处理的异常。
NotImplementedException: 方法或操作未实现。
Portal.Models.PaginatedList.CreateAsync(object p, int v, int pageSize) in PaginatedList.cs,第 47 行

控制器:

public async Task<IActionResult> Index(string sortOrder,
                                       string currentFilter,
                                       string searchString,
                                       int? pageNumber)
{
    List<StudentViewModal> listOfStudents = new List<StudentViewModal>();

    DataTable dataTable = new DataTable();

    using (SqlConnection sqlConnection = new SqlConnection(_configuration.GetConnectionString("SCHOOL")))
    {
        sqlConnection.Open();

        SqlDataAdapter sqlDa = new SqlDataAdapter("proc_GetStudents", sqlConnection);
        sqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
        sqlDa.Fill(dataTable);

        foreach (DataRow dr in dataTable.Rows)
        {
            listOfStudents.Add(
                new StudentViewModal
                {
                    ID = Convert.ToInt32(dr["ID"]),
                    Name = Convert.ToString(dr["Name"]),
                });
        }
    }

    int pageSize = 3;

    return View(await PaginatedList<StudentViewModal>.CreateAsync(listOfStudents, pageNumber ?? 1, pageSize));
}

这是分页助手类:

namespace Portal.Models.Referral
{
    public class PaginatedList<T> : List<T>
    {
        public int PageIndex { get; private set; }
        public int TotalPages { get; private set; }

        public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
        {
            PageIndex = pageIndex;
            TotalPages = (int)Math.Ceiling(count / (double)pageSize);

            this.AddRange(items);
        }

        public bool HasPreviousPage
        {
            get
            {
                return (PageIndex > 1);
            }
        }

        public bool HasNextPage
        {
            get
            {
                return (PageIndex < TotalPages);
            }
        }

        public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
        {
            var count = await source.CountAsync();
            var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
            return new PaginatedList<T>(items, count, pageIndex, pageSize);
        }

        internal static Task<object> CreateAsync(object p, int v, int pageSize)
        {
            throw new NotImplementedException();
        }
    }
}
2 个回复
internal static Task<object> CreateAsync(object p, int v, int pageSize)

正在被调用而不是

public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)

因为每个参数都匹配“对象 p​​”,包括 IQueryable 类型的参数

您必须使参数 p 更具体或实际实现该方法。

更多详情:

以下是导致您出现问题的原因:

 throw new NotImplementedException();

如果您实现(编写实际的功能代码),您的错误就会消失。

但是为什么它在代码中达到最高点(第 47 行)

原因是List listOfStudents 也是一个对象类型,因为C# 中的一切都扩展了对象。 所以这意味着

CreateAsync(listOfStudents, pageNumber ?? 1, pageSize)

匹配的签名

 internal static Task<object> CreateAsync(object p, int v, int pageSize)
    {
        throw new NotImplementedException();
    }

它被调用并抛出 NotImplementedException。

Asp.net 核心分页与 Entity 框架一起使用来查询数据库并且只返回某些数据。 由于运行存储过程返回所有数据,因此分页不再有用,因为所有可能不需要的数据都已经到达。 我们进行分页的原因之一是减少时间,而不是获取现在不需要的额外数据。 如果我们喜欢在视图中进行分页,那么我们可以使用 JavaScript 库。 否则需要在存储过程中进行分页,或者如果我们希望 Asp.net core 为我们进行分页,那么我们需要切换到实体框架并在 C# 中使用 LINQ 查询。

1 在asp.net中使用存储过程进行自定义分页

我需要从数据库中获取大约40000行并绑定到gridview,然后此数据需要导出到excel和PDF。 当我使用简单的绑定过程绑定行时,大约需要5到6分钟的薄荷糖。 因此,我编写了一个用于自定义分页的存储过程。 我遵循的程序如下。 结束 当我执行存储过程时,则显示以下错误 ...

3 存储过程中的动态查询不返回值作为 ASP.Net Core 2.2 中的 DataSet/DataTable

我有一个存储过程,它返回一个动态表作为结果。 来自此答案的SQL 代码功劳 这是我在 ASP.net Core 2.2 中的 C# 代码 dt为空。 我尝试了一个跟踪器,在那里生成的 SQL 调用在运行时返回正确的结果。 跟踪器还显示该过程已完成该过程。 有什么我想念的吗? 编辑:我已经 ...

4 SQL存储过程和asp.net无法正常工作

您好,我在这里需要一点帮助,我遇到错误,它说不包括名称空间或程序集..请让我知道我缺少什么dll文件或什么文件? 前端(aspx.cs文件中的代码) 后端(SQLSTOREDPROCEDURE) 以下是具体的错误详细信息: Web.config文件代码: ...

5 在ASP.NET中使用参数化存储过程

因此,我的SQL Server管理员允许我访问具有5个参数的存储过程,这些参数返回15列数据。 但是,如果我想过滤非参数化的列,我只有几个选项。 创建DataSet没有帮助,因为对数据库的查询只能是存储过程及其参数,而不是Select语句。 我可以使用Linq-to-XML创建 ...

7 ASP.NET存储过程方法不起作用

我有这种方法正在调用存储过程: 我的问题是这行不通。 我刚收到此消息:发生错误。 我知道它不是与数据库的连接,因为如果我将存储过程名称更改为另一个存储过程,它不会返回该错误消息。 我觉得这与这部分有关: 因为我要传入一个int值,所以如果我将另一个存储过程与NVarCha ...

10 ASP.NET Core:将存储过程结果获取到视图模型

我有一个名为 TdetailsVM 的视图模型,如下所示: 现在在控制器中,我将锦标赛的 ID 传递给任务: 这会将特定锦标赛的值返回到ThisTourney ,稍后我将其传递给视图模型 我需要类似的东西: 然后我可以将值传递给视图模型,如下所示 传递第一个要求的数据很好,它可以工作 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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