加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

如何在ASP.NET中处理长时间运行的数据库查询

发布时间:2020-12-16 09:39:39 所属栏目:asp.Net 来源:网络整理
导读:我是一名 Windows桌面应用程序程序员,我是ASP.NET新手. 当我在Page_Load(对象发送者,EventArgs e)执行长时间运行的数据库查询时,用户必须等到查询完成(查询需要很长时间). 我可以使用SqlDataReader在另一个线程中逐行从表中提取数据并逐行向用户发送数据吗?
我是一名 Windows桌面应用程序程序员,我是ASP.NET新手.

当我在Page_Load(对象发送者,EventArgs e)执行长时间运行的数据库查询时,用户必须等到查询完成(查询需要很长时间).

我可以使用SqlDataReader在另一个线程中逐行从表中提取数据并逐行向用户发送数据吗?通过这种方式,用户无需等到从数据库中提取所有行.

如果我使用WPF框架编写Windows桌面应用程序,我可以在另一个线程中逐行从数据库中提取数据,并使用BeginInvoke模式逐行将数据发送到UI.

但是,当我用ASP.NET编写Web应用程序时,我不知道最好的方法是什么.我可以在另一个线程中逐行提取数据并将提取的数据放入Session,然后我定期发送XMLHttpRequest以从Session获取数据吗?

我想知道是否存在长时间运行的数据库查询,在ASP.NET中处理它的最佳实践是什么?

提前致谢.

解决方法

Can I use SqlDataReader to pull data from a table row-by-row in
another thread and send the data to users row-by-row? In this way,the
users doesn’t need to wait until the all rows are pulled from the
database.

问题是ASP.NET应用程序具有与Windows窗体应用程序不同的生命周期.呈现页面并向用户发送响应后,您将无法再处理数据.你可以做的是使用JavaScript.您可以使用UpdatePanel,ASP.NET的AJAX实现,或使用XMLHttpRequests. (JQuery,我相信你已经听过,使用$.ajax简化了这些请求).您可以使用.gif加载代替您的数据,并在页面准备好后使用javascript获取数据.

逐行加载可能比较棘手.下面的代码将启动数据库调用,并在查询完成之前返回呈现的页面:

protected void Page_Load( object sender,EventArgs e)
    {
        string query = "SELECT * FROM db.Tablename;"
        ThreadPool.QueueUserWorkItem(new WaitCallback (BuildDataSet),query);

    }

    private void BuildDataSet(object query)
    {
        Queue Q = new Queue();

        //Connection String,etc.

        while rdr.Read()
        {
            Q.Enqueue(rdr["Column"];
        }
    }

您需要第二页来处理获取行的XMLHttpRequests.困难在于持久化这些数据,在请求之间进行识别,以及可能的内存管理.

我能想到的最简单的路径是在page_load上执行SELECT TOP(50),然后在获取完整数据后再执行ajax.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读