paginate mysql结果在wpf调度任务中

xggvc2p6  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(207)

我有一个通用方法,可以在计划任务中运行查询,如下所示:

public static DataSet ExecuteQuery(string strQuery)
{
    DataSet ds = new DataSet();

    using (MySqlConnection mySqlConnection = new MySqlConnection("server=localhost;uid=root;database=sampleDB"))
    {
        mySqlConnection.Open();

        using (MySqlDataAdapter dataAdapter = new MySqlDataAdapter(strQuery, mySqlConnection))
        {
            dataAdapter.TableMappings.Add("Table", "data");
            dataAdapter.Fill(ds);
        }

        mySqlConnection.Close();
    }
    return ds;
}

要使用它,我可以从任务内部调用它,如下所示:

DataSet results = DataConnection.ExecuteQuery("SELECT * from appointments");

我一直在寻找一种对结果分页的方法,但我能找到的每个解决方案都使用数据网格和按钮在页面之间导航。
我尝试使用这个页面的扩展:linq和pagination,但是在结果被添加到列表之后,它似乎需要进一步的下游,此时mysql查询已经被执行,并且可能返回数十万个结果存储在内存中。
我还是想用同样的简单调用来结束这个过程,但将它改为:

DataSet results = DataConnection.ExecuteQuery("SELECT * from appointments", 1, 50);
bvjxkvbb

bvjxkvbb1#

我想你找错地方了。如果您实际上谈论的是“数十万条记录”,则不应在代码级别对此进行分页。在mysql表中应该有一个主键,或者一个索引字段,您可以根据该字段简单地分页。
您应该通过过滤记录来查询所需的记录量,这在数据库端(查询特定的数据块,从而减少查找和搜索)和客户端(为返回的对象分配内存)都是有效的。
实施:
1) 检查您是否有id,如果没有您可以添加一个使用自动递增功能。或者您可以简单地使用limit@start,@end 2)修改您的c查询,并根据ui交互进行分页。

相关问题